diff options
Diffstat (limited to 'source3/rpc_client/cli_srvsvc.c')
-rw-r--r-- | source3/rpc_client/cli_srvsvc.c | 594 |
1 files changed, 205 insertions, 389 deletions
diff --git a/source3/rpc_client/cli_srvsvc.c b/source3/rpc_client/cli_srvsvc.c index 4180141cba..b883cc1942 100644 --- a/source3/rpc_client/cli_srvsvc.c +++ b/source3/rpc_client/cli_srvsvc.c @@ -6,6 +6,7 @@ * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, * Copyright (C) Paul Ashton 1997. + * Copyright (C) Jeremy Allison 1999. * * 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 @@ -32,94 +33,10 @@ extern int DEBUGLEVEL; /**************************************************************************** -do a server net tprt enum -****************************************************************************/ -BOOL srv_net_srv_tprt_enum( - const char *srv_name, - uint32 switch_value, SRV_TPRT_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd) -{ - prs_struct data; - prs_struct rdata; - SRV_Q_NET_TPRT_ENUM q_o; - BOOL valid_enum = False; - struct cli_connection *con = NULL; - - if (ctr == NULL || preferred_len == 0) return False; - - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { - return False; - } - - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); - - /* create and send a MSRPC command with api SRV_NETTPRTENUM */ - - DEBUG(4,("SRV Net Server Transport Enum, level %d, enum:%8x\n", - switch_value, get_enum_hnd(hnd))); - - ctr->switch_value = switch_value; - ctr->ptr_tprt_ctr = 1; - ctr->tprt.info0.num_entries_read = 0; - ctr->tprt.info0.ptr_tprt_info = 1; - - /* store the parameters */ - make_srv_q_net_tprt_enum(&q_o, srv_name, - switch_value, ctr, - preferred_len, - hnd); - - /* turn parameters into data stream */ - srv_io_q_net_tprt_enum("", &q_o, &data, 0); - - /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NETTRANSPORTENUM, &data, &rdata)) - { - SRV_R_NET_TPRT_ENUM r_o; - BOOL p; - - r_o.ctr = ctr; - - srv_io_r_net_tprt_enum("", &r_o, &rdata, 0); - p = rdata.offset != 0; - - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_TPRT_ENUM: info class %d does not match request %d\n", - r_o.ctr->switch_value, switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_enum = True; - } - } - - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); - - return valid_enum; -} - -/**************************************************************************** do a server net conn enum ****************************************************************************/ -BOOL srv_net_srv_conn_enum( char *srv_name, char *qual_name, +BOOL do_srv_net_srv_conn_enum(struct cli_state *cli, + char *server_name, char *qual_name, uint32 switch_value, SRV_CONN_INFO_CTR *ctr, uint32 preferred_len, ENUM_HND *hnd) @@ -127,23 +44,18 @@ BOOL srv_net_srv_conn_enum( char *srv_name, char *qual_name, prs_struct data; prs_struct rdata; SRV_Q_NET_CONN_ENUM q_o; - BOOL valid_enum = False; - struct cli_connection *con = NULL; - - if (ctr == NULL || preferred_len == 0) return False; + SRV_R_NET_CONN_ENUM r_o; - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if (server_name == NULL || ctr == NULL || preferred_len == 0) return False; - } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , MAX_PDU_FRAG_LEN, 4, MARSHALL); + prs_init(&rdata, 0, 4, UNMARSHALL); /* create and send a MSRPC command with api SRV_NETCONNENUM */ - DEBUG(4,("SRV Net Server Connection Enum %s), level %d, enum:%8x\n", - qual_name, switch_value, get_enum_hnd(hnd))); + DEBUG(4,("SRV Net Server Connection Enum(%s, %s), level %d, enum:%8x\n", + server_name, qual_name, switch_value, get_enum_hnd(hnd))); ctr->switch_value = switch_value; ctr->ptr_conn_ctr = 1; @@ -151,59 +63,60 @@ BOOL srv_net_srv_conn_enum( char *srv_name, char *qual_name, ctr->conn.info0.ptr_conn_info = 1; /* store the parameters */ - make_srv_q_net_conn_enum(&q_o, srv_name, qual_name, + init_srv_q_net_conn_enum(&q_o, server_name, qual_name, switch_value, ctr, preferred_len, hnd); /* turn parameters into data stream */ - srv_io_q_net_conn_enum("", &q_o, &data, 0); + if(!srv_io_q_net_conn_enum("", &q_o, &data, 0)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NETCONNENUM, &data, &rdata)) - { - SRV_R_NET_CONN_ENUM r_o; - BOOL p; + if(!rpc_api_pipe_req(cli, SRV_NETCONNENUM, &data, &rdata)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } - r_o.ctr = ctr; + prs_mem_free(&data); - srv_io_r_net_conn_enum("", &r_o, &rdata, 0); - p = rdata.offset != 0; - - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_CONN_ENUM: info class %d does not match request %d\n", - r_o.ctr->switch_value, switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_enum = True; - } + r_o.ctr = ctr; + + if(!srv_io_r_net_conn_enum("", &r_o, &rdata, 0)) { + prs_mem_free(&rdata); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); + if (r_o.status != 0) { + /* report error code */ + DEBUG(0,("SRV_R_NET_SRV_CONN_ENUM: %s\n", get_nt_error_msg(r_o.status))); + prs_mem_free(&rdata); + return False; + } - return valid_enum; + if (r_o.ctr->switch_value != switch_value) { + /* different switch levels. oops. */ + DEBUG(0,("SRV_R_NET_SRV_CONN_ENUM: info class %d does not match request %d\n", + r_o.ctr->switch_value, switch_value)); + prs_mem_free(&rdata); + return False; + } + + prs_mem_free(&rdata); + + return True; } /**************************************************************************** do a server net sess enum ****************************************************************************/ -BOOL srv_net_srv_sess_enum( char *srv_name, char *qual_name, char *user_name, + +BOOL do_srv_net_srv_sess_enum(struct cli_state *cli, + char *server_name, char *qual_name, uint32 switch_value, SRV_SESS_INFO_CTR *ctr, uint32 preferred_len, ENUM_HND *hnd) @@ -211,23 +124,18 @@ BOOL srv_net_srv_sess_enum( char *srv_name, char *qual_name, char *user_name, prs_struct data; prs_struct rdata; SRV_Q_NET_SESS_ENUM q_o; - BOOL valid_enum = False; - struct cli_connection *con = NULL; - - if (ctr == NULL || preferred_len == 0) return False; + SRV_R_NET_SESS_ENUM r_o; - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if (server_name == NULL || ctr == NULL || preferred_len == 0) return False; - } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , MAX_PDU_FRAG_LEN, 4, MARSHALL); + prs_init(&rdata, 0, 4, UNMARSHALL); /* create and send a MSRPC command with api SRV_NETSESSENUM */ - DEBUG(4,("SRV Net Session Enum, level %d, enum:%8x\n", - switch_value, get_enum_hnd(hnd))); + DEBUG(4,("SRV Net Session Enum (%s), level %d, enum:%8x\n", + server_name, switch_value, get_enum_hnd(hnd))); ctr->switch_value = switch_value; ctr->ptr_sess_ctr = 1; @@ -235,145 +143,130 @@ BOOL srv_net_srv_sess_enum( char *srv_name, char *qual_name, char *user_name, ctr->sess.info0.ptr_sess_info = 1; /* store the parameters */ - make_srv_q_net_sess_enum(&q_o, srv_name, qual_name, user_name, + init_srv_q_net_sess_enum(&q_o, server_name, qual_name, switch_value, ctr, preferred_len, hnd); /* turn parameters into data stream */ - srv_io_q_net_sess_enum("", &q_o, &data, 0); + if(!srv_io_q_net_sess_enum("", &q_o, &data, 0)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NETSESSENUM, &data, &rdata)) - { - SRV_R_NET_SESS_ENUM r_o; - BOOL p; + if (!rpc_api_pipe_req(cli, SRV_NETSESSENUM, &data, &rdata)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } + + prs_mem_free(&data); - r_o.ctr = ctr; + r_o.ctr = ctr; - srv_io_r_net_sess_enum("", &r_o, &rdata, 0); - p = rdata.offset != 0; + if(!srv_io_r_net_sess_enum("", &r_o, &rdata, 0)) { + prs_mem_free(&rdata); + return False; + } - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_SESS_ENUM: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_SESS_ENUM: info class %d does not match request %d\n", - r_o.ctr->switch_value, switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_enum = True; - } + if (r_o.status != 0) { + /* report error code */ + DEBUG(0,("SRV_R_NET_SRV_SESS_ENUM: %s\n", get_nt_error_msg(r_o.status))); + prs_mem_free(&rdata); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); + if (r_o.ctr->switch_value != switch_value) { + /* different switch levels. oops. */ + DEBUG(0,("SRV_R_NET_SRV_SESS_ENUM: info class %d does not match request %d\n", + r_o.ctr->switch_value, switch_value)); + prs_mem_free(&rdata); + return False; + } - return valid_enum; + prs_mem_free(&rdata); + + return True; } /**************************************************************************** do a server net share enum ****************************************************************************/ -BOOL srv_net_srv_share_enum( char *srv_name, - uint32 switch_value, SRV_SHARE_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd) +BOOL do_srv_net_srv_share_enum(struct cli_state *cli, + char *server_name, + uint32 switch_value, SRV_R_NET_SHARE_ENUM *r_o, + uint32 preferred_len, ENUM_HND *hnd) { prs_struct data; prs_struct rdata; SRV_Q_NET_SHARE_ENUM q_o; - BOOL valid_enum = False; - struct cli_connection *con = NULL; - - if (ctr == NULL || preferred_len == 0) return False; - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if (server_name == NULL || preferred_len == 0) return False; - } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , MAX_PDU_FRAG_LEN, 4, MARSHALL); + prs_init(&rdata, 0, 4, UNMARSHALL); /* create and send a MSRPC command with api SRV_NETSHAREENUM */ - DEBUG(4,("SRV Get Share Info, level %d, enum:%8x\n", - switch_value, get_enum_hnd(hnd))); + DEBUG(4,("SRV Get Share Info (%s), level %d, enum:%8x\n", + server_name, switch_value, get_enum_hnd(hnd))); - q_o.share_level = switch_value; - - ctr->switch_value = switch_value; - ctr->ptr_share_ctr = 1; - ctr->share.info1.num_entries_read = 0; - ctr->share.info1.ptr_share_info = 1; - /* store the parameters */ - make_srv_q_net_share_enum(&q_o, srv_name, - switch_value, ctr, - preferred_len, - hnd); + init_srv_q_net_share_enum(&q_o, server_name, switch_value, + preferred_len, hnd); /* turn parameters into data stream */ - srv_io_q_net_share_enum("", &q_o, &data, 0); + if(!srv_io_q_net_share_enum("", &q_o, &data, 0)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NETSHAREENUM, &data, &rdata)) - { - SRV_R_NET_SHARE_ENUM r_o; - BOOL p; + if (!rpc_api_pipe_req(cli, SRV_NETSHAREENUM, &data, &rdata)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } - r_o.ctr = ctr; + prs_mem_free(&data); - srv_io_r_net_share_enum("", &r_o, &rdata, 0); - p = rdata.offset != 0; + if(!srv_io_r_net_share_enum("", r_o, &rdata, 0)) { + prs_mem_free(&rdata); + return False; + } - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_SHARE_ENUM: info class %d does not match request %d\n", - r_o.ctr->switch_value, switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_enum = True; - } + if (r_o->status != 0) { + /* report error code */ + DEBUG(0,("SRV_R_NET_SHARE_ENUM: %s\n", get_nt_error_msg(r_o->status))); + prs_mem_free(&rdata); + free_srv_r_net_share_enum(r_o); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); + if (r_o->ctr.switch_value != switch_value) { + /* different switch levels. oops. */ + DEBUG(0,("SRV_R_NET_SHARE_ENUM: info class %d does not match request %d\n", + r_o->ctr.switch_value, switch_value)); + prs_mem_free(&rdata); + free_srv_r_net_share_enum(r_o); + return False; + } - return valid_enum; + prs_mem_free(&rdata); + + return True; } /**************************************************************************** do a server net file enum ****************************************************************************/ -BOOL srv_net_srv_file_enum( char *srv_name, char *qual_name, uint32 file_id, + +BOOL do_srv_net_srv_file_enum(struct cli_state *cli, + char *server_name, char *qual_name, uint32 switch_value, SRV_FILE_INFO_CTR *ctr, uint32 preferred_len, ENUM_HND *hnd) @@ -381,23 +274,18 @@ BOOL srv_net_srv_file_enum( char *srv_name, char *qual_name, uint32 file_id, prs_struct data; prs_struct rdata; SRV_Q_NET_FILE_ENUM q_o; - BOOL valid_enum = False; - struct cli_connection *con = NULL; + SRV_R_NET_FILE_ENUM r_o; - if (ctr == NULL || preferred_len == 0) return False; - - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if (server_name == NULL || ctr == NULL || preferred_len == 0) return False; - } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , MAX_PDU_FRAG_LEN, 4, MARSHALL); + prs_init(&rdata, 0, 4, UNMARSHALL); /* create and send a MSRPC command with api SRV_NETFILEENUM */ - DEBUG(4,("SRV Get File Info level %d, enum:%8x\n", - switch_value, get_enum_hnd(hnd))); + DEBUG(4,("SRV Get File Info (%s), level %d, enum:%8x\n", + server_name, switch_value, get_enum_hnd(hnd))); q_o.file_level = switch_value; @@ -407,189 +295,117 @@ BOOL srv_net_srv_file_enum( char *srv_name, char *qual_name, uint32 file_id, ctr->file.info3.ptr_file_info = 1; /* store the parameters */ - make_srv_q_net_file_enum(&q_o, srv_name, qual_name, file_id, + init_srv_q_net_file_enum(&q_o, server_name, qual_name, switch_value, ctr, preferred_len, hnd); /* turn parameters into data stream */ - srv_io_q_net_file_enum("", &q_o, &data, 0); + if(!srv_io_q_net_file_enum("", &q_o, &data, 0)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NETFILEENUM, &data, &rdata)) - { - SRV_R_NET_FILE_ENUM r_o; - BOOL p; + if (!rpc_api_pipe_req(cli, SRV_NETFILEENUM, &data, &rdata)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } - r_o.ctr = ctr; + prs_mem_free(&data); - srv_io_r_net_file_enum("", &r_o, &rdata, 0); - p = rdata.offset != 0; + r_o.ctr = ctr; + + if(!srv_io_r_net_file_enum("", &r_o, &rdata, 0)) { + prs_mem_free(&rdata); + return False; + } - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_FILE_ENUM: info class %d does not match request %d\n", - r_o.ctr->switch_value, switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_enum = True; - } + if (r_o.status != 0) { + /* report error code */ + DEBUG(0,("SRV_R_NET_FILE_ENUM: %s\n", get_nt_error_msg(r_o.status))); + prs_mem_free(&rdata); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); + if (r_o.ctr->switch_value != switch_value) { + /* different switch levels. oops. */ + DEBUG(0,("SRV_R_NET_FILE_ENUM: info class %d does not match request %d\n", + r_o.ctr->switch_value, switch_value)); + prs_mem_free(&rdata); + return False; + } - return valid_enum; + prs_mem_free(&rdata); + + return True; } /**************************************************************************** do a server get info ****************************************************************************/ -BOOL srv_net_srv_get_info( char *srv_name, uint32 switch_value, - SRV_INFO_CTR *ctr) +BOOL do_srv_net_srv_get_info(struct cli_state *cli, + char *server_name, uint32 switch_value, SRV_INFO_CTR *ctr) { prs_struct data; prs_struct rdata; SRV_Q_NET_SRV_GET_INFO q_o; - BOOL valid_info = False; - struct cli_connection *con = NULL; - - if (switch_value == 0 || ctr == NULL) return False; + SRV_R_NET_SRV_GET_INFO r_o; - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if (server_name == NULL || switch_value == 0 || ctr == NULL) return False; - } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); + prs_init(&data , MAX_PDU_FRAG_LEN, 4, MARSHALL); + prs_init(&rdata, 0, 4, UNMARSHALL); /* create and send a MSRPC command with api SRV_NET_SRV_GET_INFO */ - DEBUG(4,("SRV Get Server Info level %d\n", switch_value)); + DEBUG(4,("SRV Get Server Info (%s), level %d\n", server_name, switch_value)); /* store the parameters */ - make_srv_q_net_srv_get_info(&q_o, srv_name, switch_value); + init_srv_q_net_srv_get_info(&q_o, server_name, switch_value); /* turn parameters into data stream */ - srv_io_q_net_srv_get_info("", &q_o, &data, 0); + if(!srv_io_q_net_srv_get_info("", &q_o, &data, 0)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; + } /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NET_SRV_GET_INFO, &data, &rdata)) - { - SRV_R_NET_SRV_GET_INFO r_o; - BOOL p; - - r_o.ctr = ctr; - - srv_io_r_net_srv_get_info("", &r_o, &rdata, 0); - p = rdata.offset != 0; - p = rdata.offset != 0; - - if (p && r_o.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); - p = 0; - } - - if (p && r_o.ctr->switch_value != q_o.switch_value) - { - /* different switch levels. oops. */ - DEBUG(0,("SRV_R_NET_SRV_GET_INFO: info class %d does not match request %d\n", - r_o.ctr->switch_value, q_o.switch_value)); - p = 0; - } - - if (p) - { - /* ok, at last: we're happy. */ - valid_info = True; - } + if (!rpc_api_pipe_req(cli, SRV_NET_SRV_GET_INFO, &data, &rdata)) { + prs_mem_free(&data); + prs_mem_free(&rdata); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); - - cli_connection_unlink(con); + prs_mem_free(&data); - return valid_info; -} + r_o.ctr = ctr; -/**************************************************************************** -get server time -****************************************************************************/ -BOOL srv_net_remote_tod( char *srv_name, TIME_OF_DAY_INFO *tod) -{ - prs_struct data; - prs_struct rdata; - SRV_Q_NET_REMOTE_TOD q_t; - BOOL valid_info = False; - struct cli_connection *con = NULL; - - if (tod == NULL) return False; - - if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con)) - { + if(!srv_io_r_net_srv_get_info("", &r_o, &rdata, 0)) { + prs_mem_free(&rdata); return False; } - prs_init(&data , 1024, 4, SAFETY_MARGIN, False); - prs_init(&rdata, 0 , 4, SAFETY_MARGIN, True ); - - /* create and send a MSRPC command with api SRV_NET_REMOTE_TOD */ - - DEBUG(4,("SRV Remote TOD (%s)\n", srv_name)); - - /* store the parameters */ - make_srv_q_net_remote_tod(&q_t, srv_name); - - /* turn parameters into data stream */ - srv_io_q_net_remote_tod("", &q_t, &data, 0); - - /* send the data on \PIPE\ */ - if (rpc_con_pipe_req(con, SRV_NET_REMOTE_TOD, &data, &rdata)) - { - SRV_R_NET_REMOTE_TOD r_t; - BOOL p; - - r_t.tod = tod; + if (r_o.status != 0) { + /* report error code */ + DEBUG(0,("SRV_R_NET_SRV_GET_INFO: %s\n", get_nt_error_msg(r_o.status))); + prs_mem_free(&rdata); + return False; + } - srv_io_r_net_remote_tod("", &r_t, &rdata, 0); - p = rdata.offset != 0; - p = rdata.offset != 0; - - if (p && r_t.status != 0) - { - /* report error code */ - DEBUG(0,("SRV_R_NET_REMOTE_TOD: %s\n", get_nt_error_msg(r_t.status))); - p = False; - } - - if (p) - { - valid_info = True; - } + if (r_o.ctr->switch_value != q_o.switch_value) { + /* different switch levels. oops. */ + DEBUG(0,("SRV_R_NET_SRV_GET_INFO: info class %d does not match request %d\n", + r_o.ctr->switch_value, q_o.switch_value)); + prs_mem_free(&rdata); + return False; } - prs_mem_free(&data ); - prs_mem_free(&rdata ); + prs_mem_free(&rdata); - cli_connection_unlink(con); - - return valid_info; + return True; } |