From 16251193afdc75a6dc4adb977fb32f7464cf2aa2 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 3 May 2013 14:47:53 +0200 Subject: [PATCH] Adapt to VIR_STRDUP and VIR_STRNDUP in src/rpc/* --- src/rpc/gendispatch.pl | 21 ++++------ src/rpc/virnetclient.c | 16 ++++---- src/rpc/virnetmessage.c | 27 +++++++----- src/rpc/virnetsaslcontext.c | 6 +-- src/rpc/virnetserver.c | 6 +-- src/rpc/virnetserverclient.c | 10 +---- src/rpc/virnetservermdns.c | 6 +-- src/rpc/virnetsocket.c | 10 ++--- src/rpc/virnetsshsession.c | 80 ++++++++++++++++++------------------ src/rpc/virnettlscontext.c | 26 +++++------- 10 files changed, 94 insertions(+), 114 deletions(-) diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl index 37a35f4f67..3356fee881 100755 --- a/src/rpc/gendispatch.pl +++ b/src/rpc/gendispatch.pl @@ -626,12 +626,10 @@ elsif ($mode eq "server") { # SPECIAL: virConnectGetType returns a constant string that must # not be freed. Therefore, duplicate the string here. push(@vars_list, "const char *$1"); - push(@ret_list, "/* We have to strdup because remoteDispatchClientRequest will"); + push(@ret_list, "/* We have to VIR_STRDUP because remoteDispatchClientRequest will"); push(@ret_list, " * free this string after it's been serialised. */"); - push(@ret_list, "if (!(ret->type = strdup(type))) {"); - push(@ret_list, " virReportOOMError();"); + push(@ret_list, "if (VIR_STRDUP(ret->type, type) < 0)"); push(@ret_list, " goto cleanup;"); - push(@ret_list, "}"); } else { push(@vars_list, "char *$1"); push(@ret_list, "ret->$1 = $1;"); @@ -652,11 +650,8 @@ elsif ($mode eq "server") { " goto cleanup;\n" . " }\n" . " \n" . - " *$1_p = strdup($1);\n" . - " if (*$1_p == NULL) {\n" . - " virReportOOMError();\n" . - " goto cleanup;\n" . - " }\n"); + " if (VIR_STRDUP(*$1_p, $1) < 0)\n". + " goto cleanup;\n"); $single_ret_var = $1; $single_ret_by_ref = 0; @@ -1578,16 +1573,14 @@ elsif ($mode eq "client") { print "\n"; print " /* This call is caller-frees (although that isn't clear from\n"; print " * the documentation). However xdr_free will free up both the\n"; - print " * names and the list of pointers, so we have to strdup the\n"; + print " * names and the list of pointers, so we have to VIR_STRDUP the\n"; print " * names here. */\n"; print " for (i = 0; i < ret.$single_ret_list_name.${single_ret_list_name}_len; ++i) {\n"; - print " ${single_ret_list_name}[i] = strdup(ret.$single_ret_list_name.${single_ret_list_name}_val[i]);\n"; - print "\n"; - print " if (${single_ret_list_name}[i] == NULL) {\n"; + print " if (VIR_STRDUP(${single_ret_list_name}[i],\n"; + print " ret.$single_ret_list_name.${single_ret_list_name}_val[i]) < 0) {\n"; print " for (--i; i >= 0; --i)\n"; print " VIR_FREE(${single_ret_list_name}[i]);\n"; print "\n"; - print " virReportOOMError();\n"; print " goto cleanup;\n"; print " }\n"; print " }\n"; diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index d87c7e3cf8..fed2c878fb 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -36,6 +36,7 @@ #include "virlog.h" #include "virutil.h" #include "virerror.h" +#include "virstring.h" #define VIR_FROM_THIS VIR_FROM_RPC @@ -317,17 +318,14 @@ static virNetClientPtr virNetClientNew(virNetSocketPtr sock, client->wakeupSendFD = wakeupFD[1]; wakeupFD[0] = wakeupFD[1] = -1; - if (hostname && - !(client->hostname = strdup(hostname))) - goto no_memory; + if (VIR_STRDUP(client->hostname, hostname) < 0) + goto error; PROBE(RPC_CLIENT_NEW, "client=%p sock=%p", client, client->sock); return client; -no_memory: - virReportOOMError(); error: VIR_FORCE_CLOSE(wakeupFD[0]); VIR_FORCE_CLOSE(wakeupFD[1]); @@ -414,8 +412,8 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, goto no_memory; } } else { - if (!(knownhosts = strdup(knownHostsPath))) - goto no_memory; + if (VIR_STRDUP(knownhosts, knownHostsPath) < 0) + goto cleanup; } } @@ -438,8 +436,8 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, VIR_FREE(privkey); } } else { - if (!(privkey = strdup(privkeyPath))) - goto no_memory; + if (VIR_STRDUP(privkey, privkeyPath) < 0) + goto cleanup; } } diff --git a/src/rpc/virnetmessage.c b/src/rpc/virnetmessage.c index 85c831d0dc..4c6703d55e 100644 --- a/src/rpc/virnetmessage.c +++ b/src/rpc/virnetmessage.c @@ -29,6 +29,7 @@ #include "virlog.h" #include "virfile.h" #include "virutil.h" +#include "virstring.h" #define VIR_FROM_THIS VIR_FROM_RPC @@ -514,22 +515,28 @@ void virNetMessageSaveError(virNetMessageErrorPtr rerr) if (verr) { rerr->code = verr->code; rerr->domain = verr->domain; - if (verr->message && VIR_ALLOC(rerr->message) == 0) - *rerr->message = strdup(verr->message); + if (verr->message && VIR_ALLOC(rerr->message) == 0 && + VIR_STRDUP_QUIET(*rerr->message, verr->message) < 0) + VIR_FREE(rerr->message); rerr->level = verr->level; - if (verr->str1 && VIR_ALLOC(rerr->str1) == 0) - *rerr->str1 = strdup(verr->str1); - if (verr->str2 && VIR_ALLOC(rerr->str2) == 0) - *rerr->str2 = strdup(verr->str2); - if (verr->str3 && VIR_ALLOC(rerr->str3) == 0) - *rerr->str3 = strdup(verr->str3); + if (verr->str1 && VIR_ALLOC(rerr->str1) == 0 && + VIR_STRDUP_QUIET(*rerr->str1, verr->str1) < 0) + VIR_FREE(verr->str1); + if (verr->str2 && VIR_ALLOC(rerr->str2) == 0 && + VIR_STRDUP_QUIET(*rerr->str2, verr->str2) < 0) + VIR_FREE(verr->str2); + if (verr->str3 && VIR_ALLOC(rerr->str3) == 0 && + VIR_STRDUP_QUIET(*rerr->str3, verr->str3) < 0) + VIR_FREE(verr->str2); rerr->int1 = verr->int1; rerr->int2 = verr->int2; } else { rerr->code = VIR_ERR_INTERNAL_ERROR; rerr->domain = VIR_FROM_RPC; - if (VIR_ALLOC(rerr->message) == 0) - *rerr->message = strdup(_("Library function returned error but did not set virError")); + if (VIR_ALLOC(rerr->message) == 0 && + VIR_STRDUP_QUIET(*rerr->message, + _("Library function returned error but did not set virError")) < 0) + VIR_FREE(rerr->message); rerr->level = VIR_ERR_ERROR; } } diff --git a/src/rpc/virnetsaslcontext.c b/src/rpc/virnetsaslcontext.c index 6943216f7c..35dc6cfcb9 100644 --- a/src/rpc/virnetsaslcontext.c +++ b/src/rpc/virnetsaslcontext.c @@ -29,6 +29,7 @@ #include "viralloc.h" #include "virthread.h" #include "virlog.h" +#include "virstring.h" #define VIR_FROM_THIS VIR_FROM_RPC @@ -385,10 +386,7 @@ char *virNetSASLSessionListMechanisms(virNetSASLSessionPtr sasl) err, sasl_errdetail(sasl->conn)); goto cleanup; } - if (!(ret = strdup(mechlist))) { - virReportOOMError(); - goto cleanup; - } + ignore_value(VIR_STRDUP(ret, mechlist)); cleanup: virObjectUnlock(sasl); diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 94b27f02c5..a54f395e5e 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -37,6 +37,7 @@ #include "virfile.h" #include "virnetservermdns.h" #include "virdbus.h" +#include "virstring.h" #ifndef SA_SIGINFO # define SA_SIGINFO 0 @@ -387,11 +388,8 @@ virNetServerPtr virNetServerNew(size_t min_workers, srv->privileged = geteuid() == 0; srv->autoShutdownInhibitFd = -1; - if (mdnsGroupName && - !(srv->mdnsGroupName = strdup(mdnsGroupName))) { - virReportOOMError(); + if (VIR_STRDUP(srv->mdnsGroupName, mdnsGroupName) < 0) goto error; - } if (srv->mdnsGroupName) { if (!(srv->mdns = virNetServerMDNSNew())) goto error; diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index 7232191b38..0bd88ad0e9 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -693,22 +693,16 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client) #if WITH_SASL if (client->sasl) { const char *identity = virNetSASLSessionGetIdentity(client->sasl); - if (identity && - !(saslname = strdup(identity))) { - virReportOOMError(); + if (VIR_STRDUP(saslname, identity) < 0) goto cleanup; - } } #endif #if WITH_GNUTLS if (client->tls) { const char *identity = virNetTLSSessionGetX509DName(client->tls); - if (identity && - !(x509dname = strdup(identity))) { - virReportOOMError(); + if (VIR_STRDUP(x509dname, identity) < 0) goto cleanup; - } } #endif diff --git a/src/rpc/virnetservermdns.c b/src/rpc/virnetservermdns.c index 26e24d584e..68d5e4eae5 100644 --- a/src/rpc/virnetservermdns.c +++ b/src/rpc/virnetservermdns.c @@ -479,9 +479,8 @@ virNetServerMDNSGroupPtr virNetServerMDNSAddGroup(virNetServerMDNS *mdns, return NULL; } - if (!(group->name = strdup(name))) { + if (VIR_STRDUP(group->name, name) < 0) { VIR_FREE(group); - virReportOOMError(); return NULL; } group->mdns = mdns; @@ -525,9 +524,8 @@ virNetServerMDNSEntryPtr virNetServerMDNSAddEntry(virNetServerMDNSGroupPtr group } entry->port = port; - if (!(entry->type = strdup(type))) { + if (VIR_STRDUP(entry->type, type) < 0) { VIR_FREE(entry); - virReportOOMError(); return NULL; } entry->next = group->entry; diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index 24740033ed..27709d8353 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -800,10 +800,10 @@ virNetSocketNewConnectLibSSH2(const char *host, if (virNetSSHSessionSetChannelCommand(sess, command) != 0) goto error; - if (!(authMethodNext = authMethodsCopy = strdup(authMethods))) { - virReportOOMError(); + if (VIR_STRDUP(authMethodsCopy, authMethods) < 0) goto error; - } + + authMethodNext = authMethodsCopy; while ((authMethod = strsep(&authMethodNext, ","))) { if (STRCASEEQ(authMethod, "keyboard-interactive")) @@ -1191,10 +1191,8 @@ int virNetSocketGetSELinuxContext(virNetSocketPtr sock, goto cleanup; } - if (!(*context = strdup(seccon))) { - virReportOOMError(); + if (VIR_STRDUP(*context, seccon) < 0) goto cleanup; - } ret = 0; cleanup: diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c index 189d9289aa..b6aedc874c 100644 --- a/src/rpc/virnetsshsession.c +++ b/src/rpc/virnetsshsession.c @@ -234,10 +234,12 @@ virNetSSHKbIntCb(const char *name ATTRIBUTE_UNUSED, /* fill data structures for auth callback */ for (i = 0; i < num_prompts; i++) { - if (!(askcred[i].prompt = strdup(prompts[i].text))) { + char *prompt; + if (VIR_STRDUP(prompt, prompts[i].text) < 0) { priv->authCbErr = VIR_NET_SSH_AUTHCB_OOM; goto cleanup; } + askcred[i].prompt = prompt; /* remove colon and trailing spaces from prompts, as default behavior * of libvirt's auth callback is to add them */ @@ -739,7 +741,7 @@ virNetSSHAuthenticateKeyboardInteractive(virNetSSHSessionPtr sess, "authentication credentials")); return -1; case VIR_NET_SSH_AUTHCB_OOM: - virReportOOMError(); + /* OOM error already reported */ return -1; case VIR_NET_SSH_AUTHCB_RETR_ERR: virReportError(VIR_ERR_SSH, "%s", @@ -960,12 +962,14 @@ virNetSSHSessionAuthAddPasswordAuth(virNetSSHSessionPtr sess, virObjectLock(sess); - if (!(user = strdup(username)) || - !(pass = strdup(password))) - goto no_memory; + if (VIR_STRDUP(user, username) < 0 || + VIR_STRDUP(pass, password) < 0) + goto error; - if (!(auth = virNetSSHSessionAuthMethodNew(sess))) - goto no_memory; + if (!(auth = virNetSSHSessionAuthMethodNew(sess))) { + virReportOOMError(); + goto error; + } auth->username = user; auth->password = pass; @@ -974,10 +978,9 @@ virNetSSHSessionAuthAddPasswordAuth(virNetSSHSessionPtr sess, virObjectUnlock(sess); return 0; -no_memory: +error: VIR_FREE(user); VIR_FREE(pass); - virReportOOMError(); virObjectUnlock(sess); return -1; } @@ -998,11 +1001,13 @@ virNetSSHSessionAuthAddAgentAuth(virNetSSHSessionPtr sess, virObjectLock(sess); - if (!(user = strdup(username))) - goto no_memory; + if (VIR_STRDUP(user, username) < 0) + goto error; - if (!(auth = virNetSSHSessionAuthMethodNew(sess))) - goto no_memory; + if (!(auth = virNetSSHSessionAuthMethodNew(sess))) { + virReportOOMError(); + goto error; + } auth->username = user; auth->method = VIR_NET_SSH_AUTH_AGENT; @@ -1010,9 +1015,8 @@ virNetSSHSessionAuthAddAgentAuth(virNetSSHSessionPtr sess, virObjectUnlock(sess); return 0; -no_memory: +error: VIR_FREE(user); - virReportOOMError(); virObjectUnlock(sess); return -1; } @@ -1038,15 +1042,15 @@ virNetSSHSessionAuthAddPrivKeyAuth(virNetSSHSessionPtr sess, virObjectLock(sess); - if (!(user = strdup(username)) || - !(file = strdup(keyfile))) - goto no_memory; - - if (password && !(pass = strdup(password))) - goto no_memory; + if (VIR_STRDUP(user, username) < 0 || + VIR_STRDUP(file, keyfile) < 0 || + VIR_STRDUP(pass, password) < 0) + goto error; - if (!(auth = virNetSSHSessionAuthMethodNew(sess))) - goto no_memory; + if (!(auth = virNetSSHSessionAuthMethodNew(sess))) { + virReportOOMError(); + goto error; + } auth->username = user; auth->password = pass; @@ -1056,11 +1060,10 @@ virNetSSHSessionAuthAddPrivKeyAuth(virNetSSHSessionPtr sess, virObjectUnlock(sess); return 0; -no_memory: +error: VIR_FREE(user); VIR_FREE(pass); VIR_FREE(file); - virReportOOMError(); virObjectUnlock(sess); return -1; } @@ -1082,11 +1085,13 @@ virNetSSHSessionAuthAddKeyboardAuth(virNetSSHSessionPtr sess, virObjectLock(sess); - if (!(user = strdup(username))) - goto no_memory; + if (VIR_STRDUP(user, username) < 0) + goto error; - if (!(auth = virNetSSHSessionAuthMethodNew(sess))) - goto no_memory; + if (!(auth = virNetSSHSessionAuthMethodNew(sess))) { + virReportOOMError(); + goto error; + } auth->username = user; auth->tries = tries; @@ -1095,9 +1100,8 @@ virNetSSHSessionAuthAddKeyboardAuth(virNetSSHSessionPtr sess, virObjectUnlock(sess); return 0; -no_memory: +error: VIR_FREE(user); - virReportOOMError(); virObjectUnlock(sess); return -1; @@ -1112,10 +1116,8 @@ virNetSSHSessionSetChannelCommand(virNetSSHSessionPtr sess, VIR_FREE(sess->channelCommand); - if (command && !(sess->channelCommand = strdup(command))) { - virReportOOMError(); + if (VIR_STRDUP(sess->channelCommand, command) < 0) ret = -1; - } virObjectUnlock(sess); return ret; @@ -1138,8 +1140,8 @@ virNetSSHSessionSetHostKeyVerification(virNetSSHSessionPtr sess, VIR_FREE(sess->hostname); - if (hostname && !(sess->hostname = strdup(hostname))) - goto no_memory; + if (VIR_STRDUP(sess->hostname, hostname) < 0) + goto error; /* load the known hosts file */ if (hostsfile) { @@ -1163,16 +1165,14 @@ virNetSSHSessionSetHostKeyVerification(virNetSSHSessionPtr sess, /* set filename only if writing to the known hosts file is requested */ if (!(flags & VIR_NET_SSH_HOSTKEY_FILE_READONLY)) { VIR_FREE(sess->knownHostsFile); - if (!(sess->knownHostsFile = strdup(hostsfile))) - goto no_memory; + if (VIR_STRDUP(sess->knownHostsFile, hostsfile) < 0) + goto error; } } virObjectUnlock(sess); return 0; -no_memory: - virReportOOMError(); error: virObjectUnlock(sess); return -1; diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c index 305eee95b4..e29c4392b2 100644 --- a/src/rpc/virnettlscontext.c +++ b/src/rpc/virnettlscontext.c @@ -837,23 +837,23 @@ static int virNetTLSContextLocateCredentials(const char *pkipath, */ if (!*cacert) { VIR_DEBUG("Using default TLS CA certificate path"); - if (!(*cacert = strdup(LIBVIRT_CACERT))) - goto out_of_memory; + if (VIR_STRDUP(*cacert, LIBVIRT_CACERT) < 0) + goto error; } if (!*cacrl) { VIR_DEBUG("Using default TLS CA revocation list path"); - if (!(*cacrl = strdup(LIBVIRT_CACRL))) - goto out_of_memory; + if (VIR_STRDUP(*cacrl, LIBVIRT_CACRL) < 0) + goto error; } if (!*key && !*cert) { VIR_DEBUG("Using default TLS key/certificate path"); - if (!(*key = strdup(isServer ? LIBVIRT_SERVERKEY : LIBVIRT_CLIENTKEY))) - goto out_of_memory; + if (VIR_STRDUP(*key, isServer ? LIBVIRT_SERVERKEY : LIBVIRT_CLIENTKEY) < 0) + goto error; - if (!(*cert = strdup(isServer ? LIBVIRT_SERVERCERT : LIBVIRT_CLIENTCERT))) - goto out_of_memory; + if (VIR_STRDUP(*cert, isServer ? LIBVIRT_SERVERCERT : LIBVIRT_CLIENTCERT) < 0) + goto error; } VIR_FREE(user_pki_path); @@ -863,6 +863,7 @@ static int virNetTLSContextLocateCredentials(const char *pkipath, out_of_memory: virReportOOMError(); +error: VIR_FREE(*cacert); VIR_FREE(*cacrl); VIR_FREE(*key); @@ -1029,10 +1030,8 @@ static int virNetTLSContextValidCertificate(virNetTLSContextPtr ctxt, "[session]", gnutls_strerror(ret)); goto authfail; } - if (!(sess->x509dname = strdup(dname))) { - virReportOOMError(); + if (VIR_STRDUP(sess->x509dname, dname) < 0) goto authfail; - } VIR_DEBUG("Peer DN is %s", dname); if (virNetTLSContextCheckCertDN(cert, "[session]", sess->hostname, dname, @@ -1169,11 +1168,8 @@ virNetTLSSessionPtr virNetTLSSessionNew(virNetTLSContextPtr ctxt, if (!(sess = virObjectLockableNew(virNetTLSSessionClass))) return NULL; - if (hostname && - !(sess->hostname = strdup(hostname))) { - virReportOOMError(); + if (VIR_STRDUP(sess->hostname, hostname) < 0) goto error; - } if ((err = gnutls_init(&sess->session, ctxt->isServer ? GNUTLS_SERVER : GNUTLS_CLIENT)) != 0) { -- GitLab