s3: Remove unused "retry" from cli_full_connection
[nivanova/samba-autobuild/.git] / source3 / utils / netlookup.c
index 315a89d5a8c0f3983f7dcd2cc6b2e5f9ad9c6506..fa631314c485b13f37241cede6ceca2703f7c38c 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "includes.h"
 #include "utils/net.h"
+#include "../librpc/gen_ndr/ndr_lsa.h"
+#include "rpc_client/cli_lsarpc.h"
 
 /********************************************************
  Connection cachine struct. Goes away when ctx destroyed.
@@ -31,7 +33,7 @@ struct con_struct {
        NTSTATUS err;
        struct cli_state *cli;
        struct rpc_pipe_client *lsapipe;
-       POLICY_HND pol;
+       struct policy_handle pol;
 };
 
 static struct con_struct *cs;
@@ -53,14 +55,19 @@ static int cs_destructor(struct con_struct *p)
  Create the connection to localhost.
 ********************************************************/
 
-static struct con_struct *create_cs(TALLOC_CTX *ctx, NTSTATUS *perr)
+static struct con_struct *create_cs(struct net_context *c,
+                                   TALLOC_CTX *ctx, NTSTATUS *perr)
 {
        NTSTATUS nt_status;
-       struct in_addr loopback_ip;
+       struct sockaddr_storage loopback_ss;
 
-       loopback_ip.s_addr = htonl(INADDR_LOOPBACK);
        *perr = NT_STATUS_OK;
 
+       if (!interpret_string_addr(&loopback_ss, "127.0.0.1", AI_NUMERICHOST)) {
+               *perr = NT_STATUS_INVALID_PARAMETER;
+               return NULL;
+       }
+
        if (cs) {
                if (cs->failed_connect) {
                        *perr = cs->err;
@@ -90,48 +97,47 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx, NTSTATUS *perr)
 #endif
 
        nt_status = cli_full_connection(&cs->cli, global_myname(), global_myname(),
-                                       &loopback_ip, 0,
+                                       &loopback_ss, 0,
                                        "IPC$", "IPC",
 #if 0
-                                       opt_user_name,
-                                       opt_workgroup,
-                                       opt_password,
+                                       c->opt_user_name,
+                                       c->opt_workgroup,
+                                       c->opt_password,
 #else
                                        "",
-                                       opt_workgroup,
+                                       c->opt_workgroup,
                                        "",
 #endif
                                        0,
-                                       Undefined,
-                                       NULL);
+                                       Undefined);
 
        if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(2,("create_cs: Connect failed. Error was %s\n", nt_errstr(nt_status)));
-               cs->failed_connect = True;
+               cs->failed_connect = true;
                cs->err = nt_status;
                *perr = nt_status;
                return NULL;
        }
 
-       cs->lsapipe = cli_rpc_pipe_open_noauth(cs->cli,
-                                       PI_LSARPC,
-                                       &nt_status);
+       nt_status = cli_rpc_pipe_open_noauth(cs->cli,
+                                       &ndr_table_lsarpc.syntax_id,
+                                       &cs->lsapipe);
 
-       if (cs->lsapipe == NULL) {
+       if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(2,("create_cs: open LSA pipe failed. Error was %s\n", nt_errstr(nt_status)));
-               cs->failed_connect = True;
+               cs->failed_connect = true;
                cs->err = nt_status;
                *perr = nt_status;
                return NULL;
        }
 
-       nt_status = rpccli_lsa_open_policy(cs->lsapipe, ctx, True,
-                               SEC_RIGHTS_MAXIMUM_ALLOWED,
+       nt_status = rpccli_lsa_open_policy(cs->lsapipe, ctx, true,
+                               SEC_FLAG_MAXIMUM_ALLOWED,
                                &cs->pol);
 
        if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(2,("create_cs: rpccli_lsa_open_policy failed. Error was %s\n", nt_errstr(nt_status)));
-               cs->failed_connect = True;
+               cs->failed_connect = true;
                cs->err = nt_status;
                *perr = nt_status;
                return NULL;
@@ -148,8 +154,9 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx, NTSTATUS *perr)
  The local smbd will also ask winbindd for us, so we don't have to.
 ********************************************************/
 
-NTSTATUS net_lookup_name_from_sid(TALLOC_CTX *ctx,
-                               DOM_SID *psid,
+NTSTATUS net_lookup_name_from_sid(struct net_context *c,
+                               TALLOC_CTX *ctx,
+                               struct dom_sid *psid,
                                const char **ppdomain,
                                const char **ppname)
 {
@@ -162,7 +169,7 @@ NTSTATUS net_lookup_name_from_sid(TALLOC_CTX *ctx,
        *ppdomain = NULL;
        *ppname = NULL;
 
-       csp = create_cs(ctx, &nt_status);
+       csp = create_cs(c, ctx, &nt_status);
        if (csp == NULL) {
                return nt_status;
        }
@@ -190,14 +197,15 @@ NTSTATUS net_lookup_name_from_sid(TALLOC_CTX *ctx,
  Do a lookup_names call to localhost.
 ********************************************************/
 
-NTSTATUS net_lookup_sid_from_name(TALLOC_CTX *ctx, const char *full_name, DOM_SID *pret_sid)
+NTSTATUS net_lookup_sid_from_name(struct net_context *c, TALLOC_CTX *ctx,
+                                 const char *full_name, struct dom_sid *pret_sid)
 {
        NTSTATUS nt_status;
        struct con_struct *csp = NULL;
-       DOM_SID *sids = NULL;
+       struct dom_sid *sids = NULL;
        enum lsa_SidType *types = NULL;
 
-       csp = create_cs(ctx, &nt_status);
+       csp = create_cs(c, ctx, &nt_status);
        if (csp == NULL) {
                return nt_status;
        }