smbpass.c: Made unknown accounts ending in '$' server accounts, not
authorJeremy Allison <jra@samba.org>
Thu, 26 Mar 1998 02:14:40 +0000 (02:14 +0000)
committerJeremy Allison <jra@samba.org>
Thu, 26 Mar 1998 02:14:40 +0000 (02:14 +0000)
workstation.
smbpasswd.c: Added code to count down from last machine account
to add correct uid when adding a machine account.
Jeremy.

source/passdb/smbpass.c
source/utils/smbpasswd.c

index 0c5c2902992da67c8adcad8d628a15fa8292e76d..b481a501e6a4425a1f60bf423eaf1c58d6942f2e 100644 (file)
@@ -417,7 +417,7 @@ struct smb_passwd *getsmbpwent(FILE *fp)
        */
       if(pw_buf.smb_name[strlen(pw_buf.smb_name) - 1] == '$') {
         pw_buf.acct_ctrl &= ~ACB_NORMAL;
-        pw_buf.acct_ctrl |= ACB_WSTRUST;
+        pw_buf.acct_ctrl |= ACB_SVRTRUST;
       }
     }
 
index db7f4c12e2e093c3064a2dd8c7912348ddb77209..3a81a987187b0f8d7c4acf06108111ca0622fd58 100644 (file)
@@ -359,9 +359,27 @@ char *encode_acct_ctrl(uint16 acct_ctrl)
  machine account.
 ***********************************************************/
 
-int get_machine_uid(void)
+int get_new_machine_uid(void)
 {
-  return 65534;
+  int next_uid_start;
+  FILE *fp;
+  struct smb_passwd *smbpw;
+
+  if(sizeof(uid_t) == 2)
+    next_uid_start = 65533;
+
+  if(sizeof(uid_t) == 4)
+    next_uid_start = 0x7fffffff;
+
+  fp = startsmbpwent(False);
+  while((smbpw = getsmbpwent(fp)) != NULL) {
+    if(!(smbpw->acct_ctrl & ACB_SVRTRUST))
+      continue;
+
+    next_uid_start = MIN(next_uid_start, (smbpw->smb_userid-1));
+  }
+  endsmbpwent(fp);
+  return next_uid_start;
 }
 
 /*********************************************************
@@ -372,7 +390,7 @@ static void usage(char *name, BOOL is_root)
 {
        if(is_root)
                fprintf(stderr, "Usage is : %s [-a] [-d] [-m] [-n] [username] [password]\n\
-%s: [-r machine] [username] [password]\n%s: [-h]\n", name, name, name);
+%s: [-R <name resolve order>] [-r machine] [username] [password]\n%s: [-h]\n", name, name, name);
        else
                fprintf(stderr, "Usage is : %s [-h] [-r machine] [password]\n", name);
        exit(1);
@@ -450,7 +468,7 @@ int main(int argc, char **argv)
 
   is_root = (real_uid == 0);
 
-  while ((ch = getopt(argc, argv, "adhmnr:")) != EOF) {
+  while ((ch = getopt(argc, argv, "adhmnr:R:")) != EOF) {
     switch(ch) {
     case 'a':
       if(is_root)
@@ -476,6 +494,12 @@ int main(int argc, char **argv)
     case 'r':
       remote_machine = optarg;
       break;
+    case 'R':
+      if(is_root) {
+        lp_set_name_resolve_order(optarg);
+        break;
+      } else
+        usage(prog_name, is_root);
     case 'm':
       if(is_root)
         machine_account = True;
@@ -714,7 +738,7 @@ int main(int argc, char **argv)
     pwd->pw_gecos = "";
     pwd->pw_dir = machine_dir_name;
     pwd->pw_shell = "";
-    pwd->pw_uid = get_machine_uid();
+    pwd->pw_uid = get_new_machine_uid();
       
   }