]> andersk Git - moira.git/blobdiff - gen/winad.pc
Command line printer manipulation client, and build goo.
[moira.git] / gen / winad.pc
index a0079912ce83501b4d53a918b9fa97aa983e828d..48582d8ad6bb1fb6fe9547bb4876acabbcf38611 100644 (file)
@@ -32,6 +32,7 @@ char *db = "moira/moira";
 int do_user(void);
 int do_groups(void);
 int do_groupmembership(void);
+int do_containers(void);
 
 int main(int argc, char **argv)
 {
@@ -53,6 +54,7 @@ int main(int argc, char **argv)
   changed = do_user();
   changed += do_groups();
   changed += do_groupmembership();
+  changed += do_containers();
  
   if (!changed)
   {
@@ -84,6 +86,9 @@ int do_user(void)
   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);
@@ -97,39 +102,99 @@ int do_user(void)
   }
 
   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;
@@ -157,7 +222,7 @@ int do_groups(void)
   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);
@@ -171,16 +236,15 @@ int do_groups(void)
   }
 
   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;
@@ -190,7 +254,7 @@ acl_type, acl_id
       strtrim(acltype);
 
       
-      strcpy(aclname, "");
+      strcpy(aclname, "NONE");
       if (strcmp(acltype, "LIST") == 0)
       {
         EXEC SQL SELECT name into :aclname
@@ -212,9 +276,9 @@ acl_type, acl_id
       
       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)
@@ -311,8 +375,29 @@ int do_groupmembership(void)
         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);
 
@@ -328,3 +413,87 @@ int do_groupmembership(void)
   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;
+}
+
This page took 0.042492 seconds and 4 git commands to generate.