root/source3/lib/netapi/examples/user/user_getinfo.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /*
   2  *  Unix SMB/CIFS implementation.
   3  *  NetUserGetInfo query
   4  *  Copyright (C) Guenther Deschner 2008
   5  *
   6  *  This program is free software; you can redistribute it and/or modify
   7  *  it under the terms of the GNU General Public License as published by
   8  *  the Free Software Foundation; either version 3 of the License, or
   9  *  (at your option) any later version.
  10  *
  11  *  This program is distributed in the hope that it will be useful,
  12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14  *  GNU General Public License for more details.
  15  *
  16  *  You should have received a copy of the GNU General Public License
  17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  18  */
  19 
  20 #include <sys/types.h>
  21 #include <inttypes.h>
  22 #include <stdio.h>
  23 #include <stdlib.h>
  24 #include <string.h>
  25 
  26 #include <netapi.h>
  27 
  28 #include "common.h"
  29 
  30 int main(int argc, const char **argv)
     /* [<][>][^][v][top][bottom][index][help] */
  31 {
  32         NET_API_STATUS status;
  33         struct libnetapi_ctx *ctx = NULL;
  34         const char *hostname = NULL;
  35         const char *username = NULL;
  36         uint8_t *buffer = NULL;
  37         uint32_t level = 0;
  38         char *sid_str = NULL;
  39         int i;
  40 
  41         struct USER_INFO_0 *u0;
  42         struct USER_INFO_1 *u1;
  43         struct USER_INFO_2 *u2;
  44         struct USER_INFO_3 *u3;
  45         struct USER_INFO_4 *u4;
  46         struct USER_INFO_10 *u10;
  47         struct USER_INFO_11 *u11;
  48         struct USER_INFO_20 *u20;
  49         struct USER_INFO_23 *u23;
  50 
  51         poptContext pc;
  52         int opt;
  53 
  54         struct poptOption long_options[] = {
  55                 POPT_AUTOHELP
  56                 POPT_COMMON_LIBNETAPI_EXAMPLES
  57                 POPT_TABLEEND
  58         };
  59 
  60         status = libnetapi_init(&ctx);
  61         if (status != 0) {
  62                 return status;
  63         }
  64 
  65         pc = poptGetContext("user_getinfo", argc, argv, long_options, 0);
  66 
  67         poptSetOtherOptionHelp(pc, "hostname username level");
  68         while((opt = poptGetNextOpt(pc)) != -1) {
  69         }
  70 
  71         if (!poptPeekArg(pc)) {
  72                 poptPrintHelp(pc, stderr, 0);
  73                 goto out;
  74         }
  75         hostname = poptGetArg(pc);
  76 
  77         if (!poptPeekArg(pc)) {
  78                 poptPrintHelp(pc, stderr, 0);
  79                 goto out;
  80         }
  81         username = poptGetArg(pc);
  82 
  83         if (poptPeekArg(pc)) {
  84                 level = atoi(poptGetArg(pc));
  85         }
  86 
  87         /* NetUserGetInfo */
  88 
  89         status = NetUserGetInfo(hostname,
  90                                 username,
  91                                 level,
  92                                 &buffer);
  93         if (status != 0) {
  94                 printf("NetUserGetInfo failed with: %s\n",
  95                         libnetapi_get_error_string(ctx, status));
  96                 goto out;
  97         }
  98 
  99         switch (level) {
 100                 case 0:
 101                         u0 = (struct USER_INFO_0 *)buffer;
 102                         printf("name: %s\n", u0->usri0_name);
 103                         break;
 104                 case 1:
 105                         u1 = (struct USER_INFO_1 *)buffer;
 106                         printf("name: %s\n", u1->usri1_name);
 107                         printf("password: %s\n", u1->usri1_password);
 108                         printf("password_age: %d\n", u1->usri1_password_age);
 109                         printf("priv: %d\n", u1->usri1_priv);
 110                         printf("homedir: %s\n", u1->usri1_home_dir);
 111                         printf("comment: %s\n", u1->usri1_comment);
 112                         printf("flags: 0x%08x\n", u1->usri1_flags);
 113                         printf("script: %s\n", u1->usri1_script_path);
 114                         break;
 115                 case 2:
 116                         u2 = (struct USER_INFO_2 *)buffer;
 117                         printf("name: %s\n", u2->usri2_name);
 118                         printf("password: %s\n", u2->usri2_password);
 119                         printf("password_age: %d\n", u2->usri2_password_age);
 120                         printf("priv: %d\n", u2->usri2_priv);
 121                         printf("homedir: %s\n", u2->usri2_home_dir);
 122                         printf("comment: %s\n", u2->usri2_comment);
 123                         printf("flags: 0x%08x\n", u2->usri2_flags);
 124                         printf("script: %s\n", u2->usri2_script_path);
 125                         printf("auth flags: 0x%08x\n", u2->usri2_auth_flags);
 126                         printf("full name: %s\n", u2->usri2_full_name);
 127                         printf("user comment: %s\n", u2->usri2_usr_comment);
 128                         printf("user parameters: %s\n", u2->usri2_parms);
 129                         printf("workstations: %s\n", u2->usri2_workstations);
 130                         printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
 131                                 u2->usri2_last_logon);
 132                         printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
 133                                 u2->usri2_last_logoff);
 134                         printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
 135                                 u2->usri2_acct_expires);
 136                         printf("max storage: %d\n", u2->usri2_max_storage);
 137                         printf("units per week: %d\n", u2->usri2_units_per_week);
 138                         printf("logon hours:");
 139                         for (i=0; i<21; i++) {
 140                                 printf(" %x", (uint8_t)u2->usri2_logon_hours[i]);
 141                         }
 142                         printf("\n");
 143                         printf("bad password count: %d\n", u2->usri2_bad_pw_count);
 144                         printf("logon count: %d\n", u2->usri2_num_logons);
 145                         printf("logon server: %s\n", u2->usri2_logon_server);
 146                         printf("country code: %d\n", u2->usri2_country_code);
 147                         printf("code page: %d\n", u2->usri2_code_page);
 148                         break;
 149                 case 3:
 150                         u3 = (struct USER_INFO_3 *)buffer;
 151                         printf("name: %s\n", u3->usri3_name);
 152                         printf("password_age: %d\n", u3->usri3_password_age);
 153                         printf("priv: %d\n", u3->usri3_priv);
 154                         printf("homedir: %s\n", u3->usri3_home_dir);
 155                         printf("comment: %s\n", u3->usri3_comment);
 156                         printf("flags: 0x%08x\n", u3->usri3_flags);
 157                         printf("script: %s\n", u3->usri3_script_path);
 158                         printf("auth flags: 0x%08x\n", u3->usri3_auth_flags);
 159                         printf("full name: %s\n", u3->usri3_full_name);
 160                         printf("user comment: %s\n", u3->usri3_usr_comment);
 161                         printf("user parameters: %s\n", u3->usri3_parms);
 162                         printf("workstations: %s\n", u3->usri3_workstations);
 163                         printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
 164                                 u3->usri3_last_logon);
 165                         printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
 166                                 u3->usri3_last_logoff);
 167                         printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
 168                                 u3->usri3_acct_expires);
 169                         printf("max storage: %d\n", u3->usri3_max_storage);
 170                         printf("units per week: %d\n", u3->usri3_units_per_week);
 171                         printf("logon hours:");
 172                         for (i=0; i<21; i++) {
 173                                 printf(" %x", (uint8_t)u3->usri3_logon_hours[i]);
 174                         }
 175                         printf("\n");
 176                         printf("bad password count: %d\n", u3->usri3_bad_pw_count);
 177                         printf("logon count: %d\n", u3->usri3_num_logons);
 178                         printf("logon server: %s\n", u3->usri3_logon_server);
 179                         printf("country code: %d\n", u3->usri3_country_code);
 180                         printf("code page: %d\n", u3->usri3_code_page);
 181                         printf("user id: %d\n", u3->usri3_user_id);
 182                         printf("primary group id: %d\n", u3->usri3_primary_group_id);
 183                         printf("profile: %s\n", u3->usri3_profile);
 184                         printf("home dir drive: %s\n", u3->usri3_home_dir_drive);
 185                         printf("password expired: %d\n", u3->usri3_password_expired);
 186                         break;
 187                 case 4:
 188                         u4 = (struct USER_INFO_4 *)buffer;
 189                         printf("name: %s\n", u4->usri4_name);
 190                         printf("password: %s\n", u4->usri4_password);
 191                         printf("password_age: %d\n", u4->usri4_password_age);
 192                         printf("priv: %d\n", u4->usri4_priv);
 193                         printf("homedir: %s\n", u4->usri4_home_dir);
 194                         printf("comment: %s\n", u4->usri4_comment);
 195                         printf("flags: 0x%08x\n", u4->usri4_flags);
 196                         printf("script: %s\n", u4->usri4_script_path);
 197                         printf("auth flags: 0x%08x\n", u4->usri4_auth_flags);
 198                         printf("full name: %s\n", u4->usri4_full_name);
 199                         printf("user comment: %s\n", u4->usri4_usr_comment);
 200                         printf("user parameters: %s\n", u4->usri4_parms);
 201                         printf("workstations: %s\n", u4->usri4_workstations);
 202                         printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
 203                                 u4->usri4_last_logon);
 204                         printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
 205                                 u4->usri4_last_logoff);
 206                         printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
 207                                 u4->usri4_acct_expires);
 208                         printf("max storage: %d\n", u4->usri4_max_storage);
 209                         printf("units per week: %d\n", u4->usri4_units_per_week);
 210                         printf("logon hours:");
 211                         for (i=0; i<21; i++) {
 212                                 printf(" %x", (uint8_t)u4->usri4_logon_hours[i]);
 213                         }
 214                         printf("\n");
 215                         printf("bad password count: %d\n", u4->usri4_bad_pw_count);
 216                         printf("logon count: %d\n", u4->usri4_num_logons);
 217                         printf("logon server: %s\n", u4->usri4_logon_server);
 218                         printf("country code: %d\n", u4->usri4_country_code);
 219                         printf("code page: %d\n", u4->usri4_code_page);
 220                         if (ConvertSidToStringSid(u4->usri4_user_sid,
 221                                                   &sid_str)) {
 222                                 printf("user_sid: %s\n", sid_str);
 223                                 free(sid_str);
 224                         }
 225                         printf("primary group id: %d\n", u4->usri4_primary_group_id);
 226                         printf("profile: %s\n", u4->usri4_profile);
 227                         printf("home dir drive: %s\n", u4->usri4_home_dir_drive);
 228                         printf("password expired: %d\n", u4->usri4_password_expired);
 229                         break;
 230                 case 10:
 231                         u10 = (struct USER_INFO_10 *)buffer;
 232                         printf("name: %s\n", u10->usri10_name);
 233                         printf("comment: %s\n", u10->usri10_comment);
 234                         printf("usr_comment: %s\n", u10->usri10_usr_comment);
 235                         printf("full_name: %s\n", u10->usri10_full_name);
 236                         break;
 237                 case 11:
 238                         u11 = (struct USER_INFO_11 *)buffer;
 239                         printf("name: %s\n", u11->usri11_name);
 240                         printf("comment: %s\n", u11->usri11_comment);
 241                         printf("user comment: %s\n", u11->usri11_usr_comment);
 242                         printf("full name: %s\n", u11->usri11_full_name);
 243                         printf("priv: %d\n", u11->usri11_priv);
 244                         printf("auth flags: 0x%08x\n", u11->usri11_auth_flags);
 245                         printf("password_age: %d\n", u11->usri11_password_age);
 246                         printf("homedir: %s\n", u11->usri11_home_dir);
 247                         printf("user parameters: %s\n", u11->usri11_parms);
 248                         printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
 249                                 u11->usri11_last_logon);
 250                         printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
 251                                 u11->usri11_last_logoff);
 252                         printf("bad password count: %d\n", u11->usri11_bad_pw_count);
 253                         printf("logon count: %d\n", u11->usri11_num_logons);
 254                         printf("logon server: %s\n", u11->usri11_logon_server);
 255                         printf("country code: %d\n", u11->usri11_country_code);
 256                         printf("workstations: %s\n", u11->usri11_workstations);
 257                         printf("max storage: %d\n", u11->usri11_max_storage);
 258                         printf("units per week: %d\n", u11->usri11_units_per_week);
 259                         printf("logon hours:");
 260                         for (i=0; i<21; i++) {
 261                                 printf(" %x", (uint8_t)u11->usri11_logon_hours[i]);
 262                         }
 263                         printf("\n");
 264                         printf("code page: %d\n", u11->usri11_code_page);
 265                         break;
 266                 case 20:
 267                         u20 = (struct USER_INFO_20 *)buffer;
 268                         printf("name: %s\n", u20->usri20_name);
 269                         printf("comment: %s\n", u20->usri20_comment);
 270                         printf("flags: 0x%08x\n", u20->usri20_flags);
 271                         printf("rid: %d\n", u20->usri20_user_id);
 272                         break;
 273                 case 23:
 274                         u23 = (struct USER_INFO_23 *)buffer;
 275                         printf("name: %s\n", u23->usri23_name);
 276                         printf("comment: %s\n", u23->usri23_comment);
 277                         printf("flags: 0x%08x\n", u23->usri23_flags);
 278                         if (ConvertSidToStringSid(u23->usri23_user_sid,
 279                                                   &sid_str)) {
 280                                 printf("user_sid: %s\n", sid_str);
 281                                 free(sid_str);
 282                         }
 283                         break;
 284                 default:
 285                         break;
 286         }
 287 
 288  out:
 289         libnetapi_free(ctx);
 290         poptFreeContext(pc);
 291 
 292         return status;
 293 }

/* [<][>][^][v][top][bottom][index][help] */