Check cli_auth_fns functions are non-NULL before calling them.
authorTim Potter <tpot@samba.org>
Thu, 30 Mar 2000 02:03:39 +0000 (02:03 +0000)
committerTim Potter <tpot@samba.org>
Thu, 30 Mar 2000 02:03:39 +0000 (02:03 +0000)
source/rpc_client/cli_pipe.c
source/rpc_server/srv_pipe_srv.c

index 3651ce0676153d90adc03fe33b48aadae1a6d1a0..3db6ba8d2d2a3220dbd213cd0e0028339686f194 100644 (file)
@@ -4,7 +4,8 @@
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-2000,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
- *  Copyright (C) Elrond                            2000
+ *  Copyright (C) Elrond                            2000,
+ *  Copyright (C) Tim Potter                        2000
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -277,7 +278,8 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum,
                DEBUG(10, ("rpc_api_pipe_req: start: %d off: %d\n",
                           data_start, data->offset));
 
-               if (!auth->cli_create_pdu(con, opnum, data, data_start,
+               if ((auth->cli_create_pdu != NULL) &&
+                    !auth->cli_create_pdu(con, opnum, data, data_start,
                                          &data_end, &data_t, &flags))
                {
                        return False;
@@ -354,9 +356,9 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum,
                smb_io_rpc_hdr_resp("rpc_hdr_resp", &rhdr_resp, &rpdu, 0);
        }
 
-       if (rhdr.auth_len != 0
-           && !auth->cli_decode_pdu(con, &rpdu, rhdr.frag_len,
-                                    rhdr.auth_len))
+       if (rhdr.auth_len != 0 && (auth->cli_decode_pdu != NULL) &&
+           !auth->cli_decode_pdu(con, &rpdu, rhdr.frag_len,
+                                  rhdr.auth_len))
        {
                DEBUG(10, ("auth->cli_decode_pdu: failed\n"));
                return False;
@@ -412,7 +414,7 @@ BOOL rpc_api_pipe_req(struct cli_connection *con, uint8 opnum,
                        return False;
                }
 
-               if (rhdr.auth_len != 0 &&
+               if (rhdr.auth_len != 0 && (auth->cli_decode_pdu != NULL) &&
                    !auth->cli_decode_pdu(con, &rpdu, rhdr.frag_len,
                                          rhdr.auth_len))
                {
@@ -576,7 +578,7 @@ BOOL cli_send_and_rcv_pdu_trans(struct cli_connection *con,
                {
                        return False;
                }
-               if (rhdr.auth_len != 0 &&
+               if (rhdr.auth_len != 0 && (auth->cli_decode_pdu != NULL) &&
                    !auth->cli_decode_pdu(con, rdata, rhdr.frag_len,
                                          rhdr.auth_len))
                {
@@ -694,9 +696,9 @@ BOOL cli_send_and_rcv_pdu_rw(struct cli_connection *con,
                }
        }
 
-       if (rhdr.auth_len != 0
-           && !auth->cli_decode_pdu(con, rdata, rhdr.frag_len,
-                                    rhdr.auth_len))
+       if (rhdr.auth_len != 0 && (auth->cli_decode_pdu != NULL) &&
+           !auth->cli_decode_pdu(con, rdata, rhdr.frag_len,
+                                  rhdr.auth_len))
        {
                return False;
        }
@@ -759,7 +761,7 @@ BOOL cli_rcv_pdu(struct cli_connection *con,
                return False;
        }
 
-       if (rhdr.auth_len != 0 &&
+       if (rhdr.auth_len != 0 && (auth->cli_decode_pdu != NULL) &&
            !auth->cli_decode_pdu(con, rdata, rhdr.frag_len, rhdr.auth_len))
        {
                return False;
@@ -959,7 +961,8 @@ BOOL rpc_pipe_bind(struct cli_connection *con,
 
        rpc_call_id = get_rpc_call_id();
 
-       if (!auth->create_bind_req(con, &data,
+       if ((auth->create_bind_req != NULL) &&
+            !auth->create_bind_req(con, &data,
                                   rpc_call_id, abstract, transfer))
        {
                return False;
index 2c48723557af25fc7e51db09ddcb624d1be05d3a..f9b58759c7f0709cd90274f264b969a90cf79d9f 100644 (file)
@@ -38,7 +38,7 @@ static BOOL create_rpc_reply(rpcsrv_struct * l, uint32 data_start,
 {
        BOOL ret;
 
-       if (l->auth != NULL)
+       if ((l->auth != NULL) && (l->auth->api_create_pdu != NULL))
        {
                ret = l->auth->api_create_pdu(l, data_start, resp);
        }
@@ -315,7 +315,8 @@ static BOOL srv_pipe_bind_and_alt_req(rpcsrv_struct * l,
 
        if (l->auth != NULL)
        {
-               if (!l->auth->api_auth_chk(l, pkt_type))
+               if ((l->auth->api_auth_chk != NULL) &&
+                    !l->auth->api_auth_chk(l, pkt_type))
                {
                        if (l->auth_info != NULL)
                        {
@@ -343,7 +344,7 @@ static BOOL srv_pipe_bind_and_alt_req(rpcsrv_struct * l,
        smb_io_rpc_hdr_ba("", &l->hdr_ba, &l->rdata, 0);
        prs_realloc_data(&l->rdata, l->rdata.offset);
 
-       if (l->auth != NULL)
+       if ((l->auth != NULL) && (l->auth->api_auth_gen != NULL))
        {
                /***/
                /*** now the authentication ***/
@@ -445,7 +446,8 @@ static BOOL api_pipe_request(rpcsrv_struct * l, const char *name,
 {
        int i = 0;
 
-       if (l->auth != NULL && l->auth_validated)
+       if ((l->auth != NULL) && (l->auth->api_decode_pdu != NULL) && 
+            l->auth_validated)
        {
                DEBUG(10, ("api_pipe_request: validated auth\n"));
                if (!l->auth->api_decode_pdu(l))
@@ -613,7 +615,8 @@ static BOOL rpc_redir_local(rpcsrv_struct * l, prs_struct * req,
                }
                case RPC_BINDRESP:      /* not the real name! */
                {
-                       if (l->auth != NULL)
+                        if ((l->auth != NULL) && 
+                            (l->auth->api_auth_chk != NULL))
                        {
                                reply = l->auth->api_auth_chk(l,
                                                              l->hdr.