r22766: Merge from 3_0:
authorVolker Lendecke <vlendec@samba.org>
Wed, 9 May 2007 11:39:55 +0000 (11:39 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:21:55 +0000 (12:21 -0500)
r22412 | obnox | 2007-04-20 14:23:36 +0200 (Fr, 20 Apr 2007) | 5 lines

Add a "deletelocalgroup" subcommand to net sam.

Thanks to Karolin Seeger <ks@sernet.de>.
(This used to be commit fb6ac8a5b247a961963a9b6a95cd6608c5b53d09)

source3/passdb/pdb_interface.c
source3/rpc_server/srv_samr_nt.c
source3/utils/net_sam.c

index 387e3fecdee4c9223bbcb62fd63882795767db63..a46ebf5a94f7ad8351a5ba0c83df13652788783e 100644 (file)
@@ -904,35 +904,28 @@ NTSTATUS pdb_del_groupmem(TALLOC_CTX *mem_ctx, uint32 group_rid,
        return pdb->del_groupmem(pdb, mem_ctx, group_rid, member_rid);
 }
 
-BOOL pdb_find_alias(const char *name, DOM_SID *sid)
-{
-       struct pdb_methods *pdb = pdb_get_methods();
-       return NT_STATUS_IS_OK(pdb->find_alias(pdb, name, sid));
-}
-
 NTSTATUS pdb_create_alias(const char *name, uint32 *rid)
 {
        struct pdb_methods *pdb = pdb_get_methods();
        return pdb->create_alias(pdb, name, rid);
 }
 
-BOOL pdb_delete_alias(const DOM_SID *sid)
+NTSTATUS pdb_delete_alias(const DOM_SID *sid)
 {
        struct pdb_methods *pdb = pdb_get_methods();
-       return NT_STATUS_IS_OK(pdb->delete_alias(pdb, sid));
-                                                           
+       return pdb->delete_alias(pdb, sid);
 }
 
-BOOL pdb_get_aliasinfo(const DOM_SID *sid, struct acct_info *info)
+NTSTATUS pdb_get_aliasinfo(const DOM_SID *sid, struct acct_info *info)
 {
        struct pdb_methods *pdb = pdb_get_methods();
-       return NT_STATUS_IS_OK(pdb->get_aliasinfo(pdb, sid, info));
+       return pdb->get_aliasinfo(pdb, sid, info);
 }
 
-BOOL pdb_set_aliasinfo(const DOM_SID *sid, struct acct_info *info)
+NTSTATUS pdb_set_aliasinfo(const DOM_SID *sid, struct acct_info *info)
 {
        struct pdb_methods *pdb = pdb_get_methods();
-       return NT_STATUS_IS_OK(pdb->set_aliasinfo(pdb, sid, info));
+       return pdb->set_aliasinfo(pdb, sid, info);
 }
 
 NTSTATUS pdb_add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
index 1b9a8c375b71ec236c11c0aa7bce5e144ad0ce4a..b392f289a80068b427780bb7bfed38461c29cc74 100644 (file)
@@ -1354,7 +1354,7 @@ NTSTATUS _samr_query_aliasinfo(pipes_struct *p, SAMR_Q_QUERY_ALIASINFO *q_u, SAM
        DOM_SID   sid;
        struct acct_info info;
        uint32    acc_granted;
-       BOOL ret;
+       NTSTATUS status;
 
        r_u->status = NT_STATUS_OK;
 
@@ -1368,11 +1368,11 @@ NTSTATUS _samr_query_aliasinfo(pipes_struct *p, SAMR_Q_QUERY_ALIASINFO *q_u, SAM
        }
 
        become_root();
-       ret = pdb_get_aliasinfo(&sid, &info);
+       status = pdb_get_aliasinfo(&sid, &info);
        unbecome_root();
        
-       if ( !ret )
-               return NT_STATUS_NO_SUCH_ALIAS;
+       if ( !NT_STATUS_IS_OK(status))
+               return status;
 
        if ( !(r_u->ctr = TALLOC_ZERO_P( p->mem_ctx, ALIAS_INFO_CTR )) ) 
                return NT_STATUS_NO_MEMORY;
@@ -4301,7 +4301,7 @@ NTSTATUS _samr_delete_dom_alias(pipes_struct *p, SAMR_Q_DELETE_DOM_ALIAS *q_u, S
        uint32 acc_granted;
        SE_PRIV se_rights;
        BOOL can_add_accounts;
-       BOOL ret;
+       NTSTATUS status;
        DISP_INFO *disp_info = NULL;
 
        DEBUG(5, ("_samr_delete_dom_alias: %d\n", __LINE__));
@@ -4340,15 +4340,15 @@ NTSTATUS _samr_delete_dom_alias(pipes_struct *p, SAMR_Q_DELETE_DOM_ALIAS *q_u, S
                become_root();
 
        /* Have passdb delete the alias */
-       ret = pdb_delete_alias(&alias_sid);
+       status = pdb_delete_alias(&alias_sid);
        
        if ( can_add_accounts )
                unbecome_root();
                
        /******** END SeAddUsers BLOCK *********/
 
-       if ( !ret )
-               return NT_STATUS_ACCESS_DENIED;
+       if ( !NT_STATUS_IS_OK(status))
+               return status;
 
        if (!close_policy_hnd(p, &q_u->alias_pol))
                return NT_STATUS_OBJECT_NAME_INVALID;
@@ -4693,8 +4693,8 @@ NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_
        struct acct_info info;
        ALIAS_INFO_CTR *ctr;
        uint32 acc_granted;
-       BOOL ret;
        BOOL can_mod_accounts;
+       NTSTATUS status;
        DISP_INFO *disp_info = NULL;
 
        if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &group_sid, &acc_granted, &disp_info))
@@ -4709,18 +4709,16 @@ NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_
        /* get the current group information */
 
        become_root();
-       ret = pdb_get_aliasinfo( &group_sid, &info );
+       status = pdb_get_aliasinfo( &group_sid, &info );
        unbecome_root();
 
-       if ( !ret ) {
-               return NT_STATUS_NO_SUCH_ALIAS;
-       }
+       if ( !NT_STATUS_IS_OK(status))
+               return status;
 
        switch (ctr->level) {
                case 2:
                {
                        fstring group_name, acct_name;
-                       NTSTATUS status;
 
                        /* We currently do not support renaming groups in the
                           the BUILTIN domain.  Refer to util_builtin.c to understand 
@@ -4776,18 +4774,17 @@ NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_
         if ( can_mod_accounts )
                 become_root();
 
-        ret = pdb_set_aliasinfo( &group_sid, &info );
+        status = pdb_set_aliasinfo( &group_sid, &info );
 
         if ( can_mod_accounts )
                 unbecome_root();
 
         /******** End SeAddUsers BLOCK *********/
 
-       if (ret) {
+       if (NT_STATUS_IS_OK(status))
                force_flush_samr_cache(disp_info);
-       }
 
-       return ret ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
+       return status;
 }
 
 /*********************************************************************
index 4d3102b51f4e3d218200338ecb1164b84118b09b..06fc73da4bd36ca6a4da318aaf695c054527751d 100644 (file)
@@ -580,7 +580,7 @@ static int net_sam_deletelocalgroup(int argc, const char **argv)
        DOM_SID sid;
         enum lsa_SidType type;
         const char *dom, *name;
-       int ret;
+       NTSTATUS status;
 
        if (argc != 1) {
                d_fprintf(stderr, "usage: net sam deletelocalgroup <name>\n");
@@ -589,7 +589,7 @@ static int net_sam_deletelocalgroup(int argc, const char **argv)
 
        if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_ISOLATED,
                         &dom, &name, &sid, &type)) {
-               d_fprintf(stderr, "Could not find name %s.\n", argv[0]);
+               d_fprintf(stderr, "Could not find %s.\n", argv[0]);
                return -1;
        }
 
@@ -599,12 +599,13 @@ static int net_sam_deletelocalgroup(int argc, const char **argv)
                return -1;
        }
 
-       ret = pdb_delete_alias(&sid);
+       status = pdb_delete_alias(&sid);
 
-       if ( !ret ) {
-               d_fprintf(stderr, "Could not delete local group %s.\n", argv[0]);
-               return -1;
-       }
+       if (!NT_STATUS_IS_OK(status)) {
+                d_fprintf(stderr, "Deleting local group %s failed with %s\n",
+                          argv[0], nt_errstr(status));
+                return -1;
+        }
 
        d_printf("Deleted local group %s.\n", argv[0]);