r25197: Change net_make_ipc_connection() and net_make_ipc_connection_ex() to
authorMichael Adam <obnox@samba.org>
Mon, 17 Sep 2007 15:11:20 +0000 (15:11 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:30:50 +0000 (12:30 -0500)
return NTSTATUS to allow for better error propagation.

Michael

source/utils/net.c
source/utils/net_rap.c
source/utils/net_rpc.c
source/utils/net_rpc_join.c
source/utils/net_rpc_shell.c

index 962da0b39e2d9af0aa38dd5f9a8b3b737dd7859b..9c327f162dd4e3b621f47da044203d4c879b8704 100644 (file)
@@ -465,13 +465,14 @@ BOOL net_find_pdc(struct in_addr *server_ip, fstring server_name, const char *do
                return False;
 }
 
-struct cli_state *net_make_ipc_connection( unsigned flags )
+NTSTATUS net_make_ipc_connection(unsigned flags, struct cli_state **pcli)
 {
-       return net_make_ipc_connection_ex( NULL, NULL, NULL, flags );
+       return net_make_ipc_connection_ex(NULL, NULL, NULL, flags, pcli);
 }
 
-struct cli_state *net_make_ipc_connection_ex( const char *domain, const char *server,
-                                              struct in_addr *ip, unsigned flags)
+NTSTATUS net_make_ipc_connection_ex(const char *domain, const char *server,
+                                    struct in_addr *ip, unsigned flags,
+                                   struct cli_state **pcli)
 {
        char *server_name = NULL;
        struct in_addr server_ip;
@@ -481,7 +482,8 @@ struct cli_state *net_make_ipc_connection_ex( const char *domain, const char *se
        if ( !server || !ip ) {
                if (!net_find_server(domain, flags, &server_ip, &server_name)) {
                        d_fprintf(stderr, "Unable to find a suitable server\n");
-                       return NULL;
+                       nt_status = NT_STATUS_UNSUCCESSFUL;
+                       goto done;
                }
        } else {
                server_name = SMB_STRDUP( server );
@@ -500,13 +502,17 @@ struct cli_state *net_make_ipc_connection_ex( const char *domain, const char *se
                saf_store( cli->server_domain, cli->desthost );
 
        SAFE_FREE(server_name);
-       if (NT_STATUS_IS_OK(nt_status)) {
-               return cli;
-       } else {
+       if (!NT_STATUS_IS_OK(nt_status)) {
                d_fprintf(stderr, "Connection failed: %s\n",
                          nt_errstr(nt_status));
-               return NULL;
+               cli = NULL;
        }
+
+done:
+       if (pcli != NULL) {
+               *pcli = cli;
+       }
+       return nt_status;
 }
 
 static int net_user(int argc, const char **argv)
index 56d6deab73f1f718ff82a4876ce6c797a57ea63f..74eda61331e69aa7406ddba01f4f9664093cd60f 100644 (file)
@@ -83,7 +83,7 @@ static int rap_file_close(int argc, const char **argv)
                return net_rap_file_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetFileClose(cli, atoi(argv[0]));
@@ -98,7 +98,7 @@ static int rap_file_info(int argc, const char **argv)
        if (argc == 0)
                return net_rap_file_usage(argc, argv);
        
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetFileGetInfo(cli, atoi(argv[0]), one_file_fn);
@@ -128,7 +128,7 @@ int net_rap_file(int argc, const char **argv)
                struct cli_state *cli;
                int ret;
                
-               if (!(cli = net_make_ipc_connection(0))) 
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                         return -1;
 
                /* list open files */
@@ -172,7 +172,7 @@ static int rap_share_delete(int argc, const char **argv)
                return net_rap_share_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetShareDelete(cli, argv[0]);
@@ -194,7 +194,7 @@ static int rap_share_add(int argc, const char **argv)
                return net_rap_share_usage(argc, argv);
        }
                        
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        sharename = SMB_STRDUP(argv[0]);
@@ -234,7 +234,7 @@ int net_rap_share(int argc, const char **argv)
                struct cli_state *cli;
                int ret;
                
-               if (!(cli = net_make_ipc_connection(0))) 
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                        return -1;
                
                if (opt_long_list_entries) {
@@ -320,7 +320,7 @@ static int rap_session_info(int argc, const char **argv)
        struct cli_state *cli;
        int ret;
        
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        if (argc == 0) 
@@ -346,7 +346,7 @@ static int rap_session_delete(int argc, const char **argv)
        struct cli_state *cli;
        int ret;
        
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        if (argc == 0) 
@@ -370,7 +370,7 @@ int net_rap_session(int argc, const char **argv)
                struct cli_state *cli;
                int ret;
                
-               if (!(cli = net_make_ipc_connection(0))) 
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                        return -1;
 
                d_printf("Computer             User name            "\
@@ -412,7 +412,7 @@ static int net_rap_server_name(int argc, const char *argv[])
        struct cli_state *cli;
        char *name;
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        if (!cli_get_server_name(NULL, cli, &name)) {
@@ -444,7 +444,7 @@ int net_rap_server(int argc, const char **argv)
                }
        }
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        d_printf("\nEnumerating servers in this domain or workgroup: \n\n"\
@@ -472,7 +472,7 @@ int net_rap_domain(int argc, const char **argv)
        struct cli_state *cli;
        int ret;
        
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        d_printf("\nEnumerating domains:\n\n"\
@@ -569,7 +569,7 @@ static int rap_printq_info(int argc, const char **argv)
        if (argc == 0) 
                 return net_rap_printq_usage(argc, argv);
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
@@ -586,7 +586,7 @@ static int rap_printq_delete(int argc, const char **argv)
        if (argc == 0) 
                 return net_rap_printq_usage(argc, argv);
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_printjob_del(cli, atoi(argv[0]));
@@ -606,7 +606,7 @@ int net_rap_printq(int argc, const char **argv)
        };
 
        if (argc == 0) {
-               if (!(cli = net_make_ipc_connection(0))) 
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                        return -1;
 
                d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
@@ -652,7 +652,7 @@ static int rap_user_delete(int argc, const char **argv)
                 return net_rap_user_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetUserDelete(cli, argv[0]);
@@ -671,7 +671,7 @@ static int rap_user_add(int argc, const char **argv)
                 return net_rap_user_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
                        
        safe_strcpy(userinfo.user_name, argv[0], sizeof(userinfo.user_name)-1);
@@ -700,7 +700,7 @@ static int rap_user_info(int argc, const char **argv)
                 return net_rap_user_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetUserGetGroups(cli, argv[0], group_member_fn, NULL);
@@ -720,7 +720,7 @@ int net_rap_user(int argc, const char **argv)
 
        if (argc == 0) {
                struct cli_state *cli;
-               if (!(cli = net_make_ipc_connection(0)))
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                         goto done;
                if (opt_long_list_entries) {
                        d_printf("\nUser name             Comment"\
@@ -768,7 +768,7 @@ static int rap_group_delete(int argc, const char **argv)
                 return net_rap_group_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetGroupDelete(cli, argv[0]);
@@ -787,7 +787,7 @@ static int rap_group_add(int argc, const char **argv)
                 return net_rap_group_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
                        
        /* BB check for length 21 or smaller explicitly ? BB */
@@ -811,7 +811,7 @@ int net_rap_group(int argc, const char **argv)
        if (argc == 0) {
                struct cli_state *cli;
                int ret;
-               if (!(cli = net_make_ipc_connection(0)))
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                         return -1;
                if (opt_long_list_entries) {
                        d_printf("Group name            Comment\n");
@@ -852,7 +852,7 @@ static int rap_groupmember_add(int argc, const char **argv)
                 return net_rap_groupmember_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetGroupAddUser(cli, argv[0], argv[1]);
@@ -869,7 +869,7 @@ static int rap_groupmember_delete(int argc, const char **argv)
                 return net_rap_groupmember_usage(argc, argv);
        }
        
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetGroupDelUser(cli, argv[0], argv[1]);
@@ -886,7 +886,7 @@ static int rap_groupmember_list(int argc, const char **argv)
                 return net_rap_groupmember_usage(argc, argv);
        }
 
-       if (!(cli = net_make_ipc_connection(0)))
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        ret = cli_NetGroupGetUsers(cli, argv[0], group_member_fn, NULL ); 
@@ -962,7 +962,7 @@ int net_rap_service(int argc, const char **argv)
        if (argc == 0) {
                struct cli_state *cli;
                int ret;
-               if (!(cli = net_make_ipc_connection(0))) 
+               if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                        return -1;
 
                if (opt_long_list_entries) {
@@ -996,7 +996,7 @@ int net_rap_password(int argc, const char **argv)
        if (argc < 3) 
                 return net_rap_password_usage(argc, argv);
 
-       if (!(cli = net_make_ipc_connection(0))) 
+       if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
                 return -1;
 
        /* BB Add check for password lengths? */
index 273a4c7dbd77e1f950456f544073f53791280e26..e44d33d874004641a329e7c02c6487397a41d771 100644 (file)
@@ -115,7 +115,12 @@ int run_rpc_command(struct cli_state *cli_arg,
 
        /* make use of cli_state handed over as an argument, if possible */
        if (!cli_arg) {
-               cli = net_make_ipc_connection(conn_flags);
+               nt_status = net_make_ipc_connection(conn_flags, &cli);
+               if (!NT_STATUS_IS_OK(nt_status)) {
+                       DEBUG(1, ("failed to make ipc connection: %s\n",
+                                 nt_errstr(nt_status)));
+                       return -1;
+               }
        } else {
                cli = cli_arg;
        }
@@ -5821,8 +5826,10 @@ static int rpc_trustdom_vampire(int argc, const char **argv)
        };
 
        /* open \PIPE\lsarpc and open policy handle */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) {
-               DEBUG(0, ("Couldn't connect to domain controller\n"));
+       nt_status = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
+       if (!NT_STATUS_IS_OK(nt_status)) {
+               DEBUG(0, ("Couldn't connect to domain controller: %s\n",
+                         nt_errstr(nt_status)));
                talloc_destroy(mem_ctx);
                return -1;
        };
@@ -5964,8 +5971,10 @@ static int rpc_trustdom_list(int argc, const char **argv)
        };
 
        /* open \PIPE\lsarpc and open policy handle */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) {
-               DEBUG(0, ("Couldn't connect to domain controller\n"));
+       nt_status = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
+       if (!NT_STATUS_IS_OK(nt_status)) {
+               DEBUG(0, ("Couldn't connect to domain controller: %s\n",
+                         nt_errstr(nt_status)));
                talloc_destroy(mem_ctx);
                return -1;
        };
@@ -6132,8 +6141,10 @@ static int rpc_trustdom_list(int argc, const char **argv)
                        d_printf("%s%s", trusting_dom_names[i], padding);
                        
                        /* connect to remote domain controller */
-                       remote_cli = net_make_ipc_connection(NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS);
-                       if (remote_cli) {                       
+                       nt_status = net_make_ipc_connection(
+                                       NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS,
+                                       &remote_cli);
+                       if (NT_STATUS_IS_OK(nt_status)) {
                                /* query for domain's sid */
                                if (run_rpc_command(remote_cli, PI_LSARPC, 0, rpc_query_domain_sid, argc, argv))
                                        d_fprintf(stderr, "couldn't get domain's sid\n");
@@ -6141,7 +6152,9 @@ static int rpc_trustdom_list(int argc, const char **argv)
                                cli_shutdown(remote_cli);
                        
                        } else {
-                               d_fprintf(stderr, "domain controller is not responding\n");
+                               d_fprintf(stderr, "domain controller is not "
+                                         "responding: %s\n",
+                                         nt_errstr(nt_status));
                        };
                };
                
index 1097eb95754fd91d55c05f80c06a7df77e650e08..571d8016b9f69ba26390eb144d604b6e38eb2e69 100644 (file)
@@ -64,7 +64,8 @@ int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
        }
 
        /* Connect to remote machine */
-       if (!(cli = net_make_ipc_connection_ex(domain, server, ip, conn_flags))) {
+       ntret = net_make_ipc_connection_ex(domain, server, ip, conn_flags, &cli);
+       if (!NT_STATUS_IS_OK(ntret)) {
                return -1;
        }
 
@@ -180,8 +181,10 @@ int net_rpc_join_newstyle(int argc, const char **argv)
 
        /* Make authenticated connection to remote machine */
 
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) 
+       result = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
+       if (!NT_STATUS_IS_OK(result)) {
                return 1;
+       }
 
        if (!(mem_ctx = talloc_init("net_rpc_join_newstyle"))) {
                DEBUG(0, ("Could not initialise talloc context\n"));
index 474ca098e7712b4dd03bd2fcd32ee34f6ec4245d..206e18776b90c872782d58fa415dc59e3bc17a6e 100644 (file)
@@ -218,9 +218,10 @@ int net_rpc_shell(int argc, const char **argv)
                return -1;
        }
 
-       ctx->cli = net_make_ipc_connection(0);
-       if (ctx->cli == NULL) {
-               d_fprintf(stderr, "Could not open connection\n");
+       status = net_make_ipc_connection(0, &(ctx->cli));
+       if (!NT_STATUS_IS_OK(status)) {
+               d_fprintf(stderr, "Could not open connection: %s\n",
+                         nt_errstr(status));
                return -1;
        }