]> andersk Git - moira.git/blobdiff - gen/acl.pc
Command line printer manipulation client, and build goo.
[moira.git] / gen / acl.pc
index d3072cfaf0450557e6c44d15ca413fa7c7e94825..9a211385a5572fcad7b90528e3c64ce543e5a8c7 100644 (file)
@@ -19,7 +19,9 @@
 #include <stdlib.h>
 #include <string.h>
 
+#ifdef HAVE_KRB4
 #include <krb.h>
+#endif
 
 EXEC SQL INCLUDE sqlca;
 
@@ -27,7 +29,6 @@ RCSID("$Header$");
 
 char *whoami = "acl.gen";
 char *db = "moira/moira";
-char defaultrealm[REALM_SZ];
 
 void dump_access_file(FILE *out, int lid);
 char *merge_access_bits(char *t1, char *t2);
@@ -115,6 +116,8 @@ int main(int argc, char **argv)
                dump_passwd_file(out, lid);
              else if (!strcasecmp(kind, "group"))
                dump_group_file(out, lid);
+             else if (!strcasecmp(kind, "userlist"))
+               dump_user_list(out, "LIST", lid);
            }
 
          tarfile_end(tf);
@@ -132,6 +135,8 @@ void dump_access_file(FILE *out, int lid)
 {
   struct save_queue *sq = get_acl("LIST", lid, merge_access_bits);
   struct imember *m;
+  char *name, *lasts = NULL;
+  int i = 0;
 
   while (sq_remove_data(sq, &m))
     {
@@ -143,6 +148,19 @@ void dump_access_file(FILE *out, int lid)
          else
            fprintf(out, "%-10s rl\n", m->name);
        }
+      else if (m->type == 'K')
+       {
+         name = strtok_r(m->name, "@", &lasts);
+         EXEC SQL SELECT count(login) INTO :i FROM users 
+           WHERE login = :name and status != 3;
+         if (i == 1)
+           {
+             if (*(m->tag))
+               fprintf(out, "%-10s %s\n", m->name, m->tag);
+             else
+               fprintf(out, "%-10s rl\n", m->name);
+           }
+       }
       freeimember(m);
     }
   sq_destroy(sq);
@@ -250,8 +268,8 @@ void dump_passwd_file(FILE *out, int lid)
   char shell[USERS_SHELL_SIZE], fullname[USERS_FULLNAME_SIZE];
   char nickname[USERS_NICKNAME_SIZE], oa[USERS_OFFICE_ADDR_SIZE];
   char op[USERS_OFFICE_PHONE_SIZE], hp[USERS_HOME_PHONE_SIZE];
-  int uid;
-  char *name;
+  int uid, i = 0;
+  char *name, *n, *lasts = NULL;
   EXEC SQL END DECLARE SECTION;
 
   while (sq_remove_data(sq, &m))
@@ -279,6 +297,33 @@ void dump_passwd_file(FILE *out, int lid)
          fprintf(out, "%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\n",
                  name, uid, fullname, nickname, oa, op, hp, name, shell);
          break;
+
+       case 'K':
+         name = strtok_r(m->name, "@", &lasts);
+           
+         EXEC SQL SELECT count(login) INTO :i FROM users WHERE 
+           login = :name and status != 3;
+         if (i == 1)
+           {
+             EXEC SQL SELECT unix_uid, shell, fullname, nickname,
+               office_addr, office_phone, home_phone 
+               INTO :uid, :shell, :fullname, :nickname, :oa, :op, :hp 
+               FROM users 
+               WHERE login = :name AND status != 3;          
+             if (sqlca.sqlcode)
+               continue;
+             
+             strtrim(shell);
+             strtrim(fullname);
+             strtrim(nickname);
+             strtrim(op);
+             strtrim(oa);
+             strtrim(hp);
+             
+             fprintf(out, "%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\n",
+                     name, uid, fullname, nickname, oa, op, hp, name, shell);
+           }
+         break;
        }
       freeimember(m);
     }
@@ -291,12 +336,12 @@ void dump_passwd_file(FILE *out, int lid)
 void dump_group_file(FILE *out, int id)
 {
   EXEC SQL BEGIN DECLARE SECTION;
-  int lid = id, mid, gid, grouplist;
+  int lid = id, mid, gid, grouplist, i = 0;
   char mtype[IMEMBERS_MEMBER_TYPE_SIZE], name[LIST_NAME_SIZE];
   EXEC SQL END DECLARE SECTION;
   struct save_queue *sq;
   struct imember *m;
-  char *maybecomma, *s;
+  char *maybecomma, *s, *n, *lasts = NULL;
 
   EXEC SQL DECLARE csr_grp CURSOR FOR
     SELECT member_type, member_id FROM imembers
@@ -330,6 +375,17 @@ void dump_group_file(FILE *out, int id)
                  fprintf(out, "%s%s", maybecomma, m->name);
                  maybecomma = ",";
                }
+             else if (m->type == 'K')
+               {
+                 n = strtok_r(m->name, "@", &lasts);
+                 EXEC SQL SELECT count(login) INTO :i FROM users
+                   WHERE login = :n and status != 3;
+                 if (i == 1)
+                   {
+                     fprintf(out, "%s%s", maybecomma, n);
+                     maybecomma = ",";
+                   }
+               }
              freeimember(m);
            }
          fprintf(out, "\n");
This page took 0.254903 seconds and 4 git commands to generate.