struct utmp *u;
time_t recent = 0;
- strnfieldcpy(user, default_owner_str, OWNER_SIZE);
+ strfieldcpymax(user, default_owner_str, OWNER_SIZE);
setutent();
while (1) {
u = getutent();
if (u->ut_time > recent) {
recent = u->ut_time;
- strnfieldcpy(user, u->ut_user, OWNER_SIZE);
+ strfieldcpymax(user, u->ut_user, OWNER_SIZE);
dbg("local user is '%s'", user);
break;
}
static int create_node(struct udevice *dev, int fake)
{
- char filename[255];
- char linktarget[255];
- char partitionname[255];
- char *linkname;
- char *symlinks;
+ char filename[NAME_SIZE];
+ char linkname[NAME_SIZE];
+ char linktarget[NAME_SIZE];
+ char partitionname[NAME_SIZE];
int retval = 0;
uid_t uid = 0;
gid_t gid = 0;
int i;
int tail;
+ char *pos;
+ int len;
strfieldcpy(filename, udev_root);
strfieldcat(filename, dev->name);
if (endptr[0] == '\0')
uid = (uid_t) id;
else {
+ struct passwd *pw;
if (strncmp(dev->owner, LOCAL_USER, sizeof(LOCAL_USER)) == 0)
set_to_local_user(dev->owner);
- struct passwd *pw = getpwnam(dev->owner);
+ pw = getpwnam(dev->owner);
if (pw == NULL)
dbg("specified user unknown '%s'", dev->owner);
else
selinux_add_node(filename);
/* create symlink if requested */
- if (dev->symlink[0] != '\0') {
- symlinks = dev->symlink;
- while (1) {
- linkname = strsep(&symlinks, " ");
- if (linkname == NULL || linkname[0] == '\0')
- break;
-
- strfieldcpy(filename, udev_root);
- strfieldcat(filename, linkname);
- dbg("symlink '%s' to node '%s' requested", filename, dev->name);
- if (!fake)
- if (strrchr(linkname, '/'))
- create_path(filename);
-
- /* optimize relative link */
- linktarget[0] = '\0';
- i = 0;
- tail = 0;
- while ((dev->name[i] == linkname[i]) && dev->name[i]) {
- if (dev->name[i] == '/')
- tail = i+1;
- i++;
- }
- while (linkname[i] != '\0') {
- if (linkname[i] == '/')
- strfieldcat(linktarget, "../");
- i++;
- }
+ foreach_strpart(dev->symlink, " ", pos, len) {
+ strfieldcpymax(linkname, pos, len+1);
+ strfieldcpy(filename, udev_root);
+ strfieldcat(filename, linkname);
+ dbg("symlink '%s' to node '%s' requested", filename, dev->name);
+ if (!fake)
+ if (strrchr(linkname, '/'))
+ create_path(filename);
+
+ /* optimize relative link */
+ linktarget[0] = '\0';
+ i = 0;
+ tail = 0;
+ while ((dev->name[i] == linkname[i]) && dev->name[i]) {
+ if (dev->name[i] == '/')
+ tail = i+1;
+ i++;
+ }
+ while (linkname[i] != '\0') {
+ if (linkname[i] == '/')
+ strfieldcat(linktarget, "../");
+ i++;
+ }
- strfieldcat(linktarget, &dev->name[tail]);
+ strfieldcat(linktarget, &dev->name[tail]);
- if (!fake)
- unlink_entry(filename);
+ if (!fake)
+ unlink_entry(filename);
- dbg("symlink(%s, %s)", linktarget, filename);
- if (!fake) {
- retval = symlink(linktarget, filename);
- if (retval != 0)
- dbg("symlink(%s, %s) failed with error '%s'",
- linktarget, filename, strerror(errno));
- }
+ dbg("symlink(%s, %s)", linktarget, filename);
+ if (!fake) {
+ retval = symlink(linktarget, filename);
+ if (retval != 0)
+ dbg("symlink(%s, %s) failed with error '%s'",
+ linktarget, filename, strerror(errno));
}
}