]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netapi: add support to define info level in NetUserEnum example.
authorGünther Deschner <gd@samba.org>
Thu, 17 Jul 2008 11:37:06 +0000 (13:37 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 18 Jul 2008 15:10:08 +0000 (17:10 +0200)
Guenther

source/lib/netapi/examples/user/user_enum.c

index 569d5a62d64327d6fe1eee5515b2a428c5f5dca5..cf77bf2d5402d3ca49b4c299b0a9dc116d63babb 100644 (file)
@@ -32,13 +32,18 @@ int main(int argc, const char **argv)
        NET_API_STATUS status;
        struct libnetapi_ctx *ctx = NULL;
        const char *hostname = NULL;
+       uint32_t level = 0;
        uint8_t *buffer = NULL;
        uint32_t entries_read = 0;
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
+       char *sid_str = NULL;
        int i;
 
-       struct USER_INFO_0 *info0;
+       struct USER_INFO_0 *info0 = NULL;
+       struct USER_INFO_10 *info10 = NULL;
+       struct USER_INFO_20 *info20 = NULL;
+       struct USER_INFO_23 *info23 = NULL;
 
        poptContext pc;
        int opt;
@@ -56,7 +61,7 @@ int main(int argc, const char **argv)
 
        pc = poptGetContext("user_enum", argc, argv, long_options, 0);
 
-       poptSetOtherOptionHelp(pc, "hostname");
+       poptSetOtherOptionHelp(pc, "hostname level");
        while((opt = poptGetNextOpt(pc)) != -1) {
        }
 
@@ -66,11 +71,15 @@ int main(int argc, const char **argv)
        }
        hostname = poptGetArg(pc);
 
+       if (poptPeekArg(pc)) {
+               level = atoi(poptGetArg(pc));
+       }
+
        /* NetUserEnum */
 
        do {
                status = NetUserEnum(hostname,
-                                    0,
+                                    level,
                                     FILTER_NORMAL_ACCOUNT,
                                     &buffer,
                                     (uint32_t)-1,
@@ -78,10 +87,58 @@ int main(int argc, const char **argv)
                                     &total_entries,
                                     &resume_handle);
                if (status == 0 || status == ERROR_MORE_DATA) {
-                       info0 = (struct USER_INFO_0 *)buffer;
+
+                       switch (level) {
+                               case 0:
+                                       info0 = (struct USER_INFO_0 *)buffer;
+                                       break;
+                               case 10:
+                                       info10 = (struct USER_INFO_10 *)buffer;
+                                       break;
+                               case 20:
+                                       info20 = (struct USER_INFO_20 *)buffer;
+                                       break;
+                               case 23:
+                                       info23 = (struct USER_INFO_23 *)buffer;
+                                       break;
+                               default:
+                                       break;
+                       }
+
                        for (i=0; i<entries_read; i++) {
-                               printf("user %d: %s\n", i, info0->usri0_name);
-                               info0++;
+                               switch (level) {
+                                       case 0:
+                                               printf("#%d user: %s\n", i, info0->usri0_name);
+                                               info0++;
+                                               break;
+                                       case 10:
+                                               printf("#%d user: %s\n", i, info10->usri10_name);
+                                               printf("#%d comment: %s\n", i, info10->usri10_comment);
+                                               printf("#%d usr_comment: %s\n", i, info10->usri10_usr_comment);
+                                               printf("#%d full_name: %s\n", i, info10->usri10_full_name);
+                                               info10++;
+                                               break;
+                                       case 20:
+                                               printf("#%d user: %s\n", i, info20->usri20_name);
+                                               printf("#%d comment: %s\n", i, info20->usri20_comment);
+                                               printf("#%d flags: 0x%08x\n", i, info20->usri20_flags);
+                                               printf("#%d rid: %d\n", i, info20->usri20_user_id);
+                                               info20++;
+                                               break;
+                                       case 23:
+                                               printf("#%d user: %s\n", i, info23->usri23_name);
+                                               printf("#%d comment: %s\n", i, info23->usri23_comment);
+                                               printf("#%d flags: 0x%08x\n", i, info23->usri23_flags);
+                                               if (ConvertSidToStringSid(info23->usri23_user_sid,
+                                                                         &sid_str)) {
+                                                       printf("#%d sid: %s\n", i, sid_str);
+                                                       free(sid_str);
+                                               }
+                                               info23++;
+                                               break;
+                                       default:
+                                               break;
+                               }
                        }
                        NetApiBufferFree(buffer);
                }