mirror of
https://github.com/troglobit/finit.git
synced 2026-10-29 12:40:44 +00:00
Relocate functions helpers.c -> util.c
The file helpers.c should strictly only be used for misc. helper functions to the main Finit daemon. The functions moved in this commit are generic enough to be used by any deamon or programs, and for that we have util.c Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
4 files changed
+155
-154
No files matched your search
+61
@@ -55,11 +55,21 @@ extern char *prognm;
|
||||
# include <lite/conio.h>
|
||||
# include <lite/lite.h>
|
||||
#endif
|
||||
#include "log.h"
|
||||
|
||||
char *progname (char *arg0);
|
||||
const char *basenm (const char *path);
|
||||
|
||||
char *str (char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
|
||||
int getuser (char *username, char **home);
|
||||
int getgroup (char *group);
|
||||
|
||||
int getcuser (char *buf, size_t len);
|
||||
int getcgroup (char *buf, size_t len);
|
||||
|
||||
int mksubsys (const char *dir, mode_t mode, char *user, char *group);
|
||||
|
||||
int fnread (char *buf, size_t len, char *fmt, ...) __attribute__ ((format (printf, 3, 4)));
|
||||
int fnwrite (char *value, char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
||||
int fngetint (char *path, int *val);
|
||||
@@ -94,6 +104,57 @@ int ttcooked (void);
|
||||
#define ttcooked() 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Defaults to user "root" and group "wheel" (root) if:
|
||||
* 1) the user is missing
|
||||
* 2) the group or the file /etc/group is missing
|
||||
*/
|
||||
static inline int create(char *path, mode_t mode, char *user, char *group)
|
||||
{
|
||||
int fd, uid, gid;
|
||||
|
||||
if (!path) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
uid = getuser(user, NULL);
|
||||
if (uid < 0)
|
||||
uid = 0;
|
||||
gid = getgroup(group);
|
||||
if (gid < 0)
|
||||
gid = 0;
|
||||
|
||||
fd = creat(path, mode);
|
||||
if (fd == -1) {
|
||||
warn("Failed creating %s properly", path);
|
||||
return -1;
|
||||
}
|
||||
close(fd);
|
||||
if (chown(path, uid, gid)) {
|
||||
warn("Failed chowning %s properly", path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int ln(const char *target, const char *linkpath)
|
||||
{
|
||||
if (!target || !linkpath) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (symlink(target, linkpath)) {
|
||||
if (errno != EEXIST)
|
||||
warn("Failed creating %s -> %s symlink", target, linkpath);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline char *strterm(char *str, size_t len)
|
||||
{
|
||||
str[len - 1] = 0;
|
||||
|
||||
Reference in new issue
Block a user