int do_user(void);
int do_groups(void);
int do_groupmembership(void);
+int do_containers(void);
int main(int argc, char **argv)
{
changed = do_user();
changed += do_groups();
changed += do_groupmembership();
+ changed += do_containers();
if (!changed)
{
int users_id, unix_uid, status;
char type[FILESYS_TYPE_SIZE];
char name[FILESYS_NAME_SIZE];
+ char homedir[USERS_WINHOMEDIR_SIZE];
+ char profiledir[USERS_WINPROFILEDIR_SIZE];
+ int fid;
EXEC SQL END DECLARE SECTION;
sprintf(foutf, "%s/winuser.db", winad_dir);
}
EXEC SQL DECLARE u_cursor CURSOR FOR
- SELECT users_id, login, unix_uid, status, clearid
+ SELECT users_id, login, unix_uid, status, clearid, winhomedir,
+ winprofiledir
FROM users
ORDER BY users_id;
EXEC SQL OPEN u_cursor;
while (1)
{
EXEC SQL FETCH u_cursor INTO :users_id, :login, :unix_uid, :status,
-:mit_id;
+:mit_id, :homedir, :profiledir;
if (sqlca.sqlcode)
break;
strtrim(login);
strtrim(mit_id);
-
- EXEC SQL SELECT type, name INTO :type, :name
- FROM filesys
- WHERE lockertype = 'HOMEDIR'
- AND owner = :users_id;
+ strtrim(homedir);
+ strtrim(profiledir);
+
+ if (strcmp(mit_id, "") == 0)
+ strcpy(mit_id, "0");
+
+ if (strcasecmp(homedir, "[AFS]") == 0 || strcasecmp(profiledir,
+ "[AFS]") == 0)
+ {
+ EXEC SQL SELECT filsys_id into :fid
+ FROM filesys
+ WHERE lockertype = 'HOMEDIR'
+ AND label = :login
+ AND type = 'FSGROUP';
+
+ if (sqlca.sqlcode == 0)
+ {
+ EXEC SQL DECLARE f_cursor CURSOR FOR
+ SELECT type, name
+ FROM filesys a, fsgroup b
+ WHERE a.filsys_id=b.filsys_id
+ AND b.group_id=:fid
+ ORDER by key;
+
+ EXEC SQL OPEN f_cursor;
+
+ EXEC SQL FETCH f_cursor INTO :type, :name;
+
+ if (sqlca.sqlcode == 0)
+ {
+ strtrim(type);
+ strtrim(name);
+ }
+ else
+ {
+ strcpy(type, "NONE");
+ strcpy(name, "NONE");
+ }
+
+ EXEC SQL CLOSE f_cursor;
+ }
+
+ else
+ {
+ EXEC SQL SELECT type, name into :type, :name
+ FROM filesys
+ WHERE lockertype = 'HOMEDIR'
+ AND label=:login;
+
+ if (sqlca.sqlcode == 0)
+ {
+ strtrim(type);
+ strtrim(name);
+ }
+ else
+ {
+ strcpy(type, "NONE");
+ strcpy(name, "NONE");
+ }
+ }
+ if (strcasecmp(type, "AFS") != 0)
+ strcpy(name, "[LOCAL]");
- if (sqlca.sqlcode == 0)
- {
- strtrim(type);
- strtrim(name);
- }
- else
- {
- strcpy(type, "");
- strcpy(name, "");
- }
- fprintf(fout, "%d %s %d %d %s %s %s\n",
- users_id, login, unix_uid, status, mit_id,
- type, name);
}
+ if (strcasecmp(homedir, "[AFS]") == 0)
+ strcpy(homedir, name);
+
+ if (strcasecmp(profiledir, "[AFS]") == 0)
+ {
+ strcpy(profiledir, name);
+ if (strcasecmp(name, "[LOCAL]"))
+ strcat(profiledir, "/.winprofile");
+ }
+
+ fprintf(fout, "%d %s %d %d %s %s %s\n",
+ users_id, login, unix_uid, status, mit_id,
+ homedir, profiledir);
+ }
+
if (sqlca.sqlcode < 0)
db_error(sqlca.sqlcode);
EXEC SQL CLOSE u_cursor;
char acltype[LIST_ACL_TYPE_SIZE];
int aclid;
char aclname[STRINGS_STRING_SIZE];
- int list_id, active, maillist, grouplist;
+ int list_id, active, publicflg, hidden, maillist, grouplist;
EXEC SQL END DECLARE SECTION;
sprintf(foutf, "%s/wingroup.db", winad_dir);
}
EXEC SQL DECLARE l_cursor CURSOR FOR
- SELECT list_id, name, active, maillist, grouplist, description,
-acl_type, acl_id
+ SELECT list_id, name, active, publicflg, hidden, maillist,
+ grouplist, description, acl_type, acl_id
FROM list
ORDER BY list_id;
EXEC SQL OPEN l_cursor;
while (1)
{
- EXEC SQL FETCH l_cursor INTO :list_id, :listname, :active, :maillist,
-:grouplist,
- :description, :acltype, :aclid;
+ EXEC SQL FETCH l_cursor INTO :list_id, :listname, :active, :publicflg,
+ :hidden, :maillist, :grouplist, :description, :acltype, :aclid;
if (sqlca.sqlcode)
break;
strtrim(acltype);
- strcpy(aclname, "");
+ strcpy(aclname, "NONE");
if (strcmp(acltype, "LIST") == 0)
{
EXEC SQL SELECT name into :aclname
strtrim(aclname);
- fprintf(fout, "%d %s %d %d %d %s %s %s\n",
- list_id, listname, active, maillist, grouplist, acltype, aclname,
-description);
+ fprintf(fout, "%d %s %d %d %d %d %d %s %s %s\n",
+ list_id, listname, active, publicflg, hidden, maillist,
+ grouplist, acltype, aclname, description);
}
if (sqlca.sqlcode < 0)
db_error(sqlca.sqlcode);
EXEC SQL CLOSE csr002;
+
+ /* get all the machines */
+ EXEC SQL DECLARE csr003 CURSOR FOR
+ SELECT i.member_type, m.name
+ FROM machine m, imembers i
+ WHERE i.list_id = :list_id AND i.member_type = 'MACHINE'
+ AND i.member_id = m.mach_id
+ ORDER BY m.name;
+
+ EXEC SQL OPEN csr003;
+ while (1)
+ {
+ EXEC SQL FETCH csr003 into :member_type, :member_name;
+ if (sqlca.sqlcode)
+ break;
+ fprintf(fout, "%d %s %s\n", list_id, member_type, member_name);
}
+ if (sqlca.sqlcode < 0)
+ db_error(sqlca.sqlcode);
+ EXEC SQL CLOSE csr003;
+ }
+
if (sqlca.sqlcode < 0)
db_error(sqlca.sqlcode);
fix_file(foutf);
return 1;
}
+
+int do_containers(void)
+{
+ FILE *fout;
+ char foutf[MAXPATHLEN];
+ char foutft[MAXPATHLEN];
+ EXEC SQL BEGIN DECLARE SECTION;
+ char container_name[CONTAINERS_NAME_SIZE];
+ char acl_type[CONTAINERS_ACL_TYPE_SIZE];
+ char acl_name[STRINGS_STRING_SIZE];
+ char description[CONTAINERS_DESCRIPTION_SIZE];
+ int cnt_id;
+ int acl_id;
+ EXEC SQL END DECLARE SECTION;
+
+ sprintf(foutf, "%s/wincontainer.db", winad_dir);
+ sprintf(foutft, "%s~", foutf);
+
+ fout = fopen(foutft, "w");
+ if (!fout)
+ {
+ perror("cannot open wincontainer.db for write");
+ exit(MR_OCONFIG);
+ }
+
+ EXEC SQL DECLARE container_cursor CURSOR FOR
+ SELECT name, cnt_id, acl_type, acl_id, description
+ FROM containers
+ ORDER BY cnt_id, name;
+ EXEC SQL OPEN container_cursor;
+ while (1)
+ {
+ EXEC SQL FETCH container_cursor INTO :container_name, :cnt_id,
+ :acl_type, :acl_id, :description ;
+
+ if (sqlca.sqlcode)
+ break;
+
+ strtrim(container_name);
+ strtrim(acl_type);
+ strtrim(description);
+
+ strcpy(acl_name, "NONE");
+ if (strcmp(acl_type, "LIST") == 0)
+ {
+ EXEC SQL SELECT name into :acl_name
+ FROM list
+ WHERE list_id = :acl_id;
+ }
+ else if (strcmp(acl_type, "USER") == 0)
+ {
+ EXEC SQL SELECT login into :acl_name
+ FROM users
+ WHERE users_id = :acl_id;
+ }
+ else if (strcmp(acl_type, "KERBEROS") == 0)
+ {
+ EXEC SQL SELECT string into :acl_name
+ FROM strings
+ WHERE string_id = :acl_id;
+ }
+
+ strtrim(acl_name);
+
+ fprintf(fout, "%d,%s,%s,%s,%s\n",
+ cnt_id, container_name, acl_type, acl_name,
+ description);
+ }
+ if (sqlca.sqlcode < 0)
+ db_error(sqlca.sqlcode);
+
+ EXEC SQL CLOSE container_cursor;
+ EXEC SQL COMMIT;
+
+ if (fclose(fout))
+ {
+ fprintf(stderr, "Unsuccessful file close of wincontainer.db\n");
+ exit(MR_CCONFIG);
+ }
+
+ fix_file(foutf);
+ return 1;
+}
+