#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include <strings.h>
EXEC SQL INCLUDE sqlca;
extern int errno;
char **argv;
{
FILE *out = stdout;
- char *outf = NULL, outft[64];
+ char *outf = NULL, outft[64], *p, last[256];
struct stat sb;
struct save_queue *sq;
struct prec *prec;
- int flag1, flag2, first;
+ int flag1, flag2, first, cnt;
EXEC SQL BEGIN DECLARE SECTION;
char login[257], name[257], dir[257];
int id;
EXEC SQL END DECLARE SECTION;
+ initialize_sms_error_table ();
+
#ifsql INGRES
- EXEC SQL CONNECT sms;
+ EXEC SQL CONNECT moira;
+ EXEC SQL SET LOCKMODE SESSION WHERE LEVEL=TABLE, READLOCK=SHARED;
#endsql
#ifsql INFORMIX
- EXEC SQL DATABASE sms;
+ EXEC SQL DATABASE moira;
#endsql
if (argc == 2) {
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
sq = sq_create();
+ cnt = 0;
EXEC SQL DECLARE y CURSOR FOR
SELECT p.nfsphys_id, p.dir, m.name
FROM nfsphys p, machine m
- WHERE m.mach_id = p.mach_id;
+ WHERE m.mach_id = p.mach_id
+ ORDER BY p.nfsphys_id;
EXEC SQL OPEN y;
while (1) {
EXEC SQL FETCH y INTO :id, :dir, :name;
strcpy(prec->mach, strtrim(name));
strcpy(prec->dir, strtrim(dir));
sq_save_data(sq, prec);
+ cnt++;
}
EXEC SQL CLOSE y;
+ fprintf(stderr, "Loaded %d NFS partitions\n", cnt);
while (sq_get_data(sq, &prec)) {
id = prec->phys_id;
EXEC SQL DECLARE x CURSOR FOR
SELECT u.login, u.fullname
FROM users u, filesys f
- WHERE f.label = u.login and u.status = 1 and f.phys_id = :id;
+ WHERE f.label = u.login and u.status = 1 and f.phys_id = :id
+ ORDER BY u.login;
EXEC SQL OPEN x;
first = 1;
while (1) {
}
EXEC SQL CLOSE x;
}
+ fprintf(stderr, "Processed NFS partitions\n");
+ cnt = 0;
EXEC SQL DECLARE z CURSOR FOR
SELECT DISTINCT u.login, u.fullname, f.name
FROM users u, filesys f
- WHERE f.label = u.login and u.status = 1 and f.type = "AFS"
- ORDER BY login;
+ WHERE f.label = u.login and u.status = 1 and f.type = 'AFS'
+ ORDER BY u.login;
EXEC SQL OPEN z;
- first = 0;
while (1) {
EXEC SQL FETCH z INTO :login, :name, :dir;
if (sqlca.sqlcode != 0) break;
- if (strncmp(dir, "/afs/athena", 11)) break;
- if (first != login[0]) {
- first = login[0];
- fprintf(out, "*%s:%s%c\n", "AFS", "/afs/athena.mit.edu/user/",
- first);
+ p = rindex(dir, '/');
+ if (p) *p = 0;
+ if (strcmp(last, dir)) {
+ strcpy(last, dir);
+ fprintf(out, "*%s:%s\n", "AFS", dir);
}
strtrim(login);
strtrim(name);
fprintf(out, "%s,%s\n", login, name);
+ cnt++;
}
EXEC SQL CLOSE z;
+ fprintf(stderr, "Processed %d AFS users\n", cnt);
#ifsql INGRES
EXEC SQL DISCONNECT;
sqlerr:
com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
+#ifsql INGRES
+ if (sqlca.sqlcode == 17700 || sqlca.sqlcode == -37000)
+ exit(MR_DEADLOCK);
+#endsql
critical_alert("DCM", "Central America build encountered INGRES ERROR %d",
sqlca.sqlcode);
exit(MR_INGRES_ERR);