s3:net Find uid before using it
[nivanova/samba-autobuild/.git] / source3 / utils / net_sam.c
index 113818200efb55c49be1d6e7066456965e5fa2ea..af8aaa47dfd37ad36fccd98411a2b92e33897de1 100644 (file)
@@ -21,6 +21,8 @@
 #include "includes.h"
 #include "utils/net.h"
 #include "../librpc/gen_ndr/samr.h"
+#include "smbldap.h"
+#include "../libcli/security/security.h"
 
 /*
  * Set a user's data
@@ -634,7 +636,7 @@ static int net_sam_policy(struct net_context *c, int argc, const char **argv)
 static int net_sam_rights_list(struct net_context *c, int argc,
                               const char **argv)
 {
-       uint64_t mask;
+       enum sec_privilege privilege;
 
        if (argc > 1 || c->display_usage) {
                d_fprintf(stderr, "%s\n%s",
@@ -653,12 +655,14 @@ static int net_sam_rights_list(struct net_context *c, int argc,
                return 0;
        }
 
-       if (se_priv_from_name(argv[0], &mask)) {
+       privilege = sec_privilege_id(argv[0]);
+
+       if (privilege != SEC_PRIV_INVALID) {
                struct dom_sid *sids;
                int i, num_sids;
                NTSTATUS status;
 
-               status = privilege_enum_sids(&mask, talloc_tos(),
+               status = privilege_enum_sids(privilege, talloc_tos(),
                                             &sids, &num_sids);
                if (!NT_STATUS_IS_OK(status)) {
                        d_fprintf(stderr, _("Could not list rights: %s\n"),
@@ -690,7 +694,6 @@ static int net_sam_rights_grant(struct net_context *c, int argc,
        struct dom_sid sid;
        enum lsa_SidType type;
        const char *dom, *name;
-       uint64_t mask;
        int i;
 
        if (argc < 2 || c->display_usage) {
@@ -707,12 +710,13 @@ static int net_sam_rights_grant(struct net_context *c, int argc,
        }
 
        for (i=1; i < argc; i++) {
-               if (!se_priv_from_name(argv[i], &mask)) {
+               enum sec_privilege privilege = sec_privilege_id(argv[i]);
+               if (privilege == SEC_PRIV_INVALID) {
                        d_fprintf(stderr, _("%s unknown\n"), argv[i]);
                        return -1;
                }
 
-               if (!grant_privilege(&sid, &mask)) {
+               if (!grant_privilege_by_name(&sid, argv[i])) {
                        d_fprintf(stderr, _("Could not grant privilege\n"));
                        return -1;
                }
@@ -729,7 +733,6 @@ static int net_sam_rights_revoke(struct net_context *c, int argc,
        struct dom_sid sid;
        enum lsa_SidType type;
        const char *dom, *name;
-       uint64_t mask;
        int i;
 
        if (argc < 2 || c->display_usage) {
@@ -746,13 +749,13 @@ static int net_sam_rights_revoke(struct net_context *c, int argc,
        }
 
        for (i=1; i < argc; i++) {
-
-               if (!se_priv_from_name(argv[i], &mask)) {
+               enum sec_privilege privilege = sec_privilege_id(argv[i]);
+               if (privilege == SEC_PRIV_INVALID) {
                        d_fprintf(stderr, _("%s unknown\n"), argv[i]);
                        return -1;
                }
 
-               if (!revoke_privilege(&sid, mask)) {
+               if (!revoke_privilege_by_name(&sid, argv[i])) {
                        d_fprintf(stderr, _("Could not revoke privilege\n"));
                        return -1;
                }
@@ -1778,6 +1781,13 @@ doma_done:
                                    "Admins group not available!\n"));
                        goto done;
                }
+               if (!winbind_allocate_uid(&uid)) {
+                       d_fprintf(stderr,
+                                 _("Unable to allocate a new uid to create "
+                                   "the Administrator user!\n"));
+                       goto done;
+               }
+
                name = talloc_strdup(tc, "Administrator");
                dn = talloc_asprintf(tc, "uid=Administrator,%s", lp_ldap_user_suffix());
                uidstr = talloc_asprintf(tc, "%u", (unsigned int)uid);
@@ -1798,13 +1808,6 @@ doma_done:
 
                sid_compose(&sid, get_global_sam_sid(), DOMAIN_RID_ADMINISTRATOR);
 
-               if (!winbind_allocate_uid(&uid)) {
-                       d_fprintf(stderr,
-                                 _("Unable to allocate a new uid to create "
-                                   "the Administrator user!\n"));
-                       goto done;
-               }
-
                smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_ACCOUNT);
                smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXACCOUNT);
                smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_SAMBASAMACCOUNT);
@@ -1853,7 +1856,7 @@ doma_done:
 
                sid_compose(&sid, get_global_sam_sid(), DOMAIN_RID_GUEST);
 
-               pwd = getpwnam_alloc(tc, lp_guestaccount());
+               pwd = Get_Pwnam_alloc(tc, lp_guestaccount());
 
                if (!pwd) {
                        if (domusers_gid == -1) {
@@ -1924,7 +1927,7 @@ doma_done:
 
        d_printf(_("Checking Guest's group.\n"));
 
-       pwd = getpwnam_alloc(talloc_autofree_context(), lp_guestaccount());
+       pwd = Get_Pwnam_alloc(tc, lp_guestaccount());
        if (!pwd) {
                d_fprintf(stderr,
                          _("Failed to find just created Guest account!\n"