commit fe90d24fd0cb9cd3b246b8a7936d060f502f47de from: Omar Polo date: Thu Feb 04 13:42:35 2021 UTC add compat for setproctitle This adds a check for setproctitle and for the (linux) prctl PR_SET_NAME. If setproctitle is not available, on linux we provide an implementation that use prctl (taken from tmux compat layer.) commit - 86edc4f400a47c2000befd196f80c3aab475df67 commit + fe90d24fd0cb9cd3b246b8a7936d060f502f47de blob - /dev/null blob + e387409402768c37e45f3fc7d26cc790252708db (mode 644) --- /dev/null +++ compat/setproctitle.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2016 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include + +#include "../config.h" + +#if HAVE_PR_SET_NAME + +#include + +void +setproctitle(const char *fmt, ...) +{ + char title[16], name[16], *cp; + va_list ap; + int used; + + va_start(ap, fmt); + vsnprintf(title, sizeof title, fmt, ap); + va_end(ap); + + used = snprintf(name, sizeof name, "%s: %s", getprogname(), title); + if (used >= (int)sizeof name) { + cp = strrchr(name, ' '); + if (cp != NULL) + *cp = '\0'; + } + prctl(PR_SET_NAME, name); +} +#else +void +setproctitle(const char *fmt, ...) +{ + (void)fmt; +} +#endif blob - be767b44a92787122cccbc934f1eda9fa5c1940e blob + 32f40ed5b308eedc45ab71749fc9428d1580cafe --- configure +++ configure @@ -48,7 +48,9 @@ HAVE_EXPLICIT_BZERO= HAVE_GETPROGNAME= HAVE_LIBTLS= HAVE_OPENSSL= +HAVE_PR_SET_NAME= HAVE_RECALLOCARRAY= +HAVE_SETPROCTITLE= HAVE_STRLCAT= HAVE_STRLCPY= HAVE_STRTONUM= @@ -219,7 +221,9 @@ runtest explicit_bzero EXPLICIT_BZERO || true runtest getprogname GETPROGNAME || true runtest libtls LIBTLS || true runtest openssl OPENSSL || true +runtest pr_set_name PR_SET_NAME || true runtest recallocarray RECALLOCARRAY || true +runtest setproctitle SETPROCTITLE || true runtest strlcat STRLCAT || true runtest strlcpy STRLCPY || true runtest strtonum STRTONUM || true @@ -260,7 +264,9 @@ cat <<__HEREDOC__ #define HAVE_ERR ${HAVE_ERR} #define HAVE_EXPLICIT_BZERO ${HAVE_EXPLICIT_BZERO} #define HAVE_GETPROGNAME ${HAVE_GETPROGNAME} +#define HAVE_PR_SET_NAME ${HAVE_PR_SET_NAME} #define HAVE_RECALLOCARRAY ${HAVE_RECALLOCARRAY} +#define HAVE_SETPROCTITLE ${SETPROCTITLE} #define HAVE_STRLCAT ${HAVE_STRLCAT} #define HAVE_STRLCPY ${HAVE_STRLCPY} #define HAVE_STRTONUM ${HAVE_STRTONUM} @@ -297,6 +303,10 @@ if [ ${HAVE_RECALLOCARRAY} -eq 0 ]; then echo "extern void* recallocarray(void*, size_t, size_t, size_t);" COMPAT="${COMPAT} compat/recallocarray.o" fi +if [ ${HAVE_SETPROCTITLE} -eq 0 ]; then + echo "extern void setproctitle(const char *fmt, ...);" + COMPAT="${COMPAT} compat/setproctitle.o" +fi if [ ${HAVE_STRLCAT} -eq 0 ]; then echo "extern size_t strlcat(char*, const char*, size_t);" COMPAT="${COMPAT} compat/strlcat.o" blob - /dev/null blob + 29705116c78b4cbf83c866e7c7ec4ca61585ba9b (mode 644) --- /dev/null +++ have/pr_set_name.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include + +int +main(void) +{ + prctl(PR_SET_NAME, "foo"); +} blob - /dev/null blob + 69a5f8c307a66298c10a62b0427bc1c18aab94be (mode 644) --- /dev/null +++ have/setproctitle.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +int +main(void) +{ + setproctitle("%s", "frobnicator"); +}