return &gr;
}
-
-int ufd = -1;
-
-void setutent()
-{
- if (ufd < 0)
- ufd = open(UTMP_FILE, O_RDONLY);
- fcntl(ufd, F_SETFD, FD_CLOEXEC);
- lseek(ufd, 0, SEEK_SET);
-}
-
-void endutent() {
- if (ufd < 0)
- return;
- close(ufd);
- ufd = -1;
-}
-
-struct utmp *getutent(void)
-{
- static struct utmp utmp;
- int retval;
-
- if (ufd < 0) {
- setutent();
- if (ufd < 0)
- return NULL;
- }
- retval = read(ufd, &utmp, sizeof(struct utmp));
- if (retval < 1)
- return NULL;
- return &utmp;
-}
-
#endif
char __unused[20]; /* reserved for future use */
};
-struct utmp *getutent(void);
-void setutent(void);
-void endutent(void);
-
-
#endif /* KLIBC_FIXUPS_H */
#endif /* __KLIBC__ */
dsp1:::0666
.fi
.P
-The value
-.I $local
-can be used instead of a specific username. In that case, udev will determine
-the current local user at the time of device node creation and substitute
-that username as the owner of the new device node. This is useful, for
-example, to let hot-plugged devices, such as cameras, be owned by the user at
-the current console. Note that if no user is currently logged in, or if udev
-otherwise fails to determine a current user, the
-.I default_owner
-value is used in lieu.
-.P
A number of different fields in the above configuration files support a simple
form of shell style pattern matching. It supports the following pattern characters:
.TP
#include "udevdb.h"
#include "klibc_fixups.h"
-#define LOCAL_USER "$local"
-
#include "selinux.h"
/*
return retval;
}
-/* get the local logged in user */
-static void set_to_local_user(char *user)
-{
- struct utmp *u;
- time_t recent = 0;
-
- strfieldcpymax(user, default_owner_str, OWNER_SIZE);
- setutent();
- while (1) {
- u = getutent();
- if (u == NULL)
- break;
-
- /* is this a user login ? */
- if (u->ut_type != USER_PROCESS)
- continue;
-
- /* is this a local login ? */
- if (strcmp(u->ut_host, ""))
- continue;
-
- if (u->ut_time > recent) {
- recent = u->ut_time;
- strfieldcpymax(user, u->ut_user, OWNER_SIZE);
- dbg("local user is '%s'", user);
- break;
- }
- }
- endutent();
-}
-
static int create_node(struct udevice *udev)
{
char filename[NAME_SIZE];
uid = (uid_t) id;
else {
struct passwd *pw;
- if (strncmp(udev->owner, LOCAL_USER, sizeof(LOCAL_USER)) == 0)
- set_to_local_user(udev->owner);
pw = getpwnam(udev->owner);
if (pw == NULL)