mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
s4-dns: use a loadparm list for samba_runcmd() commands
This allows commands with multiple arguments and quoting to be used, while still avoiding running a shell (and this having shell expansion problems)
This commit is contained in:
parent
336ebeabad
commit
b0b857d6ca
@ -890,7 +890,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
|
||||
struct timeval timeout,
|
||||
int stdout_log_level,
|
||||
int stderr_log_level,
|
||||
const char *arg0, ...);
|
||||
const char **argv0, ...);
|
||||
|
||||
|
||||
#endif /* _SAMBA_UTIL_H_ */
|
||||
|
@ -154,7 +154,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
|
||||
struct timeval timeout,
|
||||
int stdout_log_level,
|
||||
int stderr_log_level,
|
||||
const char *arg0, ...)
|
||||
const char **argv0, ...)
|
||||
{
|
||||
struct samba_runcmd *r;
|
||||
int p1[2], p2[2];
|
||||
@ -174,7 +174,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
|
||||
r->stdout_log_level = stdout_log_level;
|
||||
r->stderr_log_level = stderr_log_level;
|
||||
|
||||
r->arg0 = talloc_strdup(r, arg0);
|
||||
r->arg0 = talloc_strdup(r, argv0[0]);
|
||||
if (composite_nomem(r->arg0, c)) return c;
|
||||
|
||||
if (pipe(p1) != 0) {
|
||||
@ -228,13 +228,13 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
|
||||
dup2(p1[1], 1);
|
||||
dup2(p2[1], 2);
|
||||
|
||||
argv = str_list_make_single(r, r->arg0);
|
||||
argv = str_list_copy(r, argv0);
|
||||
if (!argv) {
|
||||
fprintf(stderr, "Out of memory in child\n");
|
||||
_exit(255);
|
||||
}
|
||||
|
||||
va_start(ap, arg0);
|
||||
va_start(ap, argv0);
|
||||
while (1) {
|
||||
char *arg = va_arg(ap, char *);
|
||||
if (arg == NULL) break;
|
||||
@ -246,7 +246,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
ret = execv(arg0, argv);
|
||||
ret = execv(r->arg0, argv);
|
||||
fprintf(stderr, "Failed to exec child - %s\n", strerror(errno));
|
||||
_exit(255);
|
||||
return NULL;
|
||||
|
@ -157,10 +157,10 @@ static void dnsupdate_rebuild(struct dnsupdate_service *service)
|
||||
|
||||
DEBUG(2,("Loading new DNS update grant rules\n"));
|
||||
service->confupdate.c = samba_runcmd(service->task->event_ctx, service,
|
||||
timeval_current_ofs(10, 0),
|
||||
2, 0,
|
||||
lp_rndc_command(service->task->lp_ctx),
|
||||
"reload", NULL);
|
||||
timeval_current_ofs(10, 0),
|
||||
2, 0,
|
||||
lp_rndc_command(service->task->lp_ctx),
|
||||
"reload", NULL);
|
||||
service->confupdate.c->async.fn = dnsupdate_rndc_done;
|
||||
service->confupdate.c->async.private_data = service;
|
||||
|
||||
|
@ -186,8 +186,8 @@ struct loadparm_global
|
||||
int bDisableNetbios;
|
||||
int bRpcBigEndian;
|
||||
char *szNTPSignDSocketDirectory;
|
||||
char *szRNDCCommand;
|
||||
char *szDNSUpdateCommand;
|
||||
const char **szRNDCCommand;
|
||||
const char **szDNSUpdateCommand;
|
||||
char *szNSUpdateCommand;
|
||||
struct parmlist_entry *param_opt;
|
||||
};
|
||||
@ -506,8 +506,8 @@ static struct parm_struct parm_table[] = {
|
||||
{"idmap trusted only", P_BOOL, P_GLOBAL, GLOBAL_VAR(bIdmapTrustedOnly), NULL, NULL},
|
||||
|
||||
{"ntp signd socket directory", P_STRING, P_GLOBAL, GLOBAL_VAR(szNTPSignDSocketDirectory), NULL, NULL },
|
||||
{"rndc command", P_STRING, P_GLOBAL, GLOBAL_VAR(szRNDCCommand), NULL, NULL },
|
||||
{"dns update command", P_STRING, P_GLOBAL, GLOBAL_VAR(szDNSUpdateCommand), NULL, NULL },
|
||||
{"rndc command", P_LIST, P_GLOBAL, GLOBAL_VAR(szRNDCCommand), NULL, NULL },
|
||||
{"dns update command", P_LIST, P_GLOBAL, GLOBAL_VAR(szDNSUpdateCommand), NULL, NULL },
|
||||
{"nsupdate command", P_STRING, P_GLOBAL, GLOBAL_VAR(szNSUpdateCommand), NULL, NULL },
|
||||
|
||||
{NULL, P_BOOL, P_NONE, 0, NULL, NULL}
|
||||
@ -660,8 +660,8 @@ _PUBLIC_ FN_GLOBAL_STRING(lp_dos_charset, dos_charset)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_unix_charset, unix_charset)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_display_charset, display_charset)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_piddir, szPidDir)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_rndc_command, szRNDCCommand)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_dns_update_command, szDNSUpdateCommand)
|
||||
_PUBLIC_ FN_GLOBAL_LIST(lp_rndc_command, szRNDCCommand)
|
||||
_PUBLIC_ FN_GLOBAL_LIST(lp_dns_update_command, szDNSUpdateCommand)
|
||||
_PUBLIC_ FN_GLOBAL_STRING(lp_nsupdate_command, szNSUpdateCommand)
|
||||
_PUBLIC_ FN_GLOBAL_LIST(lp_dcerpc_endpoint_servers, dcerpc_ep_servers)
|
||||
_PUBLIC_ FN_GLOBAL_LIST(lp_server_services, server_services)
|
||||
|
@ -130,8 +130,8 @@ const char **lp_wins_server_list(struct loadparm_context *);
|
||||
const char **lp_interfaces(struct loadparm_context *);
|
||||
const char *lp_socket_address(struct loadparm_context *);
|
||||
const char **lp_netbios_aliases(struct loadparm_context *);
|
||||
const char *lp_rndc_command(struct loadparm_context *);
|
||||
const char *lp_dns_update_command(struct loadparm_context *);
|
||||
const char **lp_rndc_command(struct loadparm_context *);
|
||||
const char **lp_dns_update_command(struct loadparm_context *);
|
||||
bool lp_disable_netbios(struct loadparm_context *);
|
||||
bool lp_wins_support(struct loadparm_context *);
|
||||
bool lp_wins_dns_proxy(struct loadparm_context *);
|
||||
|
Loading…
x
Reference in New Issue
Block a user