autofs/autofs-5.1.7-use-sprintf-when-constructing-hosts-mapent.patch
DistroBaker a5adb69dac Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/autofs.git#25aaf0b69441b4e7370a195cbf1c7988d0abef3d
2021-03-26 02:05:45 +00:00

77 lines
2.0 KiB
Diff

autofs-5.1.7 - use snprintf() when constructing hosts mapent
From: Ian Kent <raven@themaw.net>
Using multiple strcpy() and strcat() functions when constructing the
hosts map offset for each export is much slower than using a single
sprintf() for each.
Signed-off-by: Ian Kent <raven@themaw.net>
---
CHANGELOG | 1 +
modules/lookup_hosts.c | 26 +++++++++++++-------------
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 1bd6ac7f..d613e5ca 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@
- add xdr_exports().
- remove mount.x and rpcgen dependencies.
- dont use realloc in host exports list processing.
+- use sprintf() when constructing hosts mapent.
25/01/2021 autofs-5.1.7
- make bind mounts propagation slave by default.
diff --git a/modules/lookup_hosts.c b/modules/lookup_hosts.c
index e3ee0ab8..c1ebb7f6 100644
--- a/modules/lookup_hosts.c
+++ b/modules/lookup_hosts.c
@@ -87,10 +87,12 @@ int lookup_read_master(struct master *master, time_t age, void *context)
static char *get_exports(struct autofs_point *ap, const char *host)
{
char buf[MAX_ERR_BUF];
+ char entry[PATH_MAX + 1];
char *mapent;
struct exportinfo *exp, *this;
size_t hostlen = strlen(host);
size_t mapent_len;
+ int len, pos;
debug(ap->logopt, MODPREFIX "fetchng export list for %s", host);
@@ -114,21 +116,19 @@ static char *get_exports(struct autofs_point *ap, const char *host)
}
*mapent = 0;
+ pos = 0;
this = exp;
- while (this) {
- if (!*mapent)
- strcpy(mapent, "\"");
- else
- strcat(mapent, " \"");
- strcat(mapent, this->dir);
- strcat(mapent, "\"");
-
- strcat(mapent, " \"");
- strcat(mapent, host);
- strcat(mapent, ":");
- strcat(mapent, this->dir);
- strcat(mapent, "\"");
+ if (this) {
+ len = sprintf(mapent, "\"%s\" \"%s:%s\"",
+ this->dir, host, this->dir);
+ pos += len;
+ this = this->next;
+ }
+ while (this) {
+ len = sprintf(mapent + pos, " \"%s\" \"%s:%s\"",
+ this->dir, host, this->dir);
+ pos += len;
this = this->next;
}
rpc_exports_free(exp);