From 7b2f13a52e3629f81052faa49e8be973bb9aa3a2 Mon Sep 17 00:00:00 2001 From: Lukas Nykryn Date: Thu, 15 Aug 2013 09:54:31 +0200 Subject: [PATCH] partly support socket activated services --- chkconfig.c | 9 ++++++--- leveldb.c | 26 ++++++++++++++++++++++++++ leveldb.h | 1 + po/chkconfig.pot | 24 ++++++++++++------------ 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/chkconfig.c b/chkconfig.c index ccdb225..6a1fc61 100644 --- a/chkconfig.c +++ b/chkconfig.c @@ -622,17 +622,20 @@ int setService(char * name, int type, int where, int state) { } void forwardSystemd(const char *name, int type, const char *verb) { - + int socket = 0; if (type == TYPE_XINETD) return; if (!systemdIsInit()) return; - if (isOverriddenBySystemd(name)) { + if (isOverriddenBySystemd(name) || (socket = isSocketActivatedBySystemd(name))) { char *p; - asprintf(&p, "%s.service", name); + if(!socket) + asprintf(&p, "%s.service", name); + else + asprintf(&p, "%s.socket", name); fprintf(stderr, _("Note: Forwarding request to 'systemctl %s %s'.\n"), verb, p); diff --git a/leveldb.c b/leveldb.c index 77a1396..352076c 100644 --- a/leveldb.c +++ b/leveldb.c @@ -869,6 +869,32 @@ out: return rc; } +int isSocketActivatedBySystemd(const char *service) { + char *p; + char *s; + int rc = 0; + + asprintf(&p, SYSTEMD_SERVICE_PATH "/%s@.service", service); + asprintf(&s, SYSTEMD_SERVICE_PATH "/%s.socket", service); + + if (access(p, F_OK) >= 0 && access(s, F_OK) >= 0) { + rc = 1; + goto out; + } + free(p); + free(s); + + asprintf(&p, SYSTEMD_LOCAL_SERVICE_PATH "/%s@.service", service); + asprintf(&s, SYSTEMD_LOCAL_SERVICE_PATH "/%s.socket", service); + if (access(p, F_OK) >= 0 && access(s, F_OK) >= 0) { + rc = 1; + } +out: + free(p); + free(s); + return rc; +} + int isEnabledInSystemd(const char *service) { char *c = NULL; int r; diff --git a/leveldb.h b/leveldb.h index bfa281a..63ab99e 100644 --- a/leveldb.h +++ b/leveldb.h @@ -73,6 +73,7 @@ int systemdIsInit(); int systemdActive(); int isOverriddenBySystemd(const char *service); int isEnabledInSystemd(const char *service); +int isSocketActivatedBySystemd(const char *service); void checkSystemdDependencies(struct service *s); #endif diff --git a/po/chkconfig.pot b/po/chkconfig.pot index 7acfe8d..d174fdd 100644 --- a/po/chkconfig.pot +++ b/po/chkconfig.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-07-31 17:00+0200\n" +"POT-Creation-Date: 2013-08-08 17:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -100,50 +100,50 @@ msgstr "" msgid "You do not have enough privileges to perform this operation.\n" msgstr "" -#: ../chkconfig.c:422 ../chkconfig.c:427 ../chkconfig.c:550 +#: ../chkconfig.c:421 ../chkconfig.c:426 ../chkconfig.c:549 msgid "on" msgstr "" -#: ../chkconfig.c:422 ../chkconfig.c:427 ../chkconfig.c:550 +#: ../chkconfig.c:421 ../chkconfig.c:426 ../chkconfig.c:549 msgid "off" msgstr "" -#: ../chkconfig.c:512 +#: ../chkconfig.c:511 #, c-format msgid "xinetd based services:\n" msgstr "" -#: ../chkconfig.c:514 +#: ../chkconfig.c:513 #, c-format msgid "failed to open directory %s: %s\n" msgstr "" -#: ../chkconfig.c:638 +#: ../chkconfig.c:640 #, c-format msgid "Note: Forwarding request to 'systemctl %s %s'.\n" msgstr "" -#: ../chkconfig.c:643 +#: ../chkconfig.c:645 #, c-format msgid "Failed to forward service request to systemctl: %m\n" msgstr "" -#: ../chkconfig.c:699 +#: ../chkconfig.c:701 #, c-format msgid "%s version %s\n" msgstr "" -#: ../chkconfig.c:711 +#: ../chkconfig.c:713 #, c-format msgid "--type must be 'sysv' or 'xinetd'\n" msgstr "" -#: ../chkconfig.c:718 +#: ../chkconfig.c:720 #, c-format msgid "only one of --list, --add, --del, or --override may be specified\n" msgstr "" -#: ../chkconfig.c:803 +#: ../chkconfig.c:805 #, c-format msgid "only one runlevel may be specified for a chkconfig query\n" msgstr "" @@ -212,7 +212,7 @@ msgstr "" msgid "cannot determine current run level\n" msgstr "" -#: ../leveldb.c:813 +#: ../leveldb.c:815 #, c-format msgid "failed to make symlink %s: %s\n" msgstr "" -- 1.8.3.1