void *res = dlsym(handle, symbol);
if (res==0) {
char const *error = dlerror();
- write(2, symbol, strlen(symbol));
- write(2, ": ", 2);
- write(2, error, strlen(error));
- write(2, "\n", 2);
+ Vwrite(2, symbol, strlen(symbol));
+ Vwrite(2, ": ", 2);
+ Vwrite(2, error, strlen(error));
+ Vwrite(2, "\n", 2);
_exit(255);
}
if (isDbgLevel(DBG_INIT)) WRITE_MSG(2, ">>>>> exitRPMFake <<<<<\n");
if (pw_sock!=-1) {
uint8_t c;
- read(sync_sock, &c, 1);
- write(pw_sock, "Q", 1);
+ if (read(sync_sock, &c, 1)!=1) { /*...*/ }
+ if (write(pw_sock, "Q", 1)!=1) { /*...*/ }
}
}
uint8_t code;
uint8_t c;
- // read the token...
- read(sync_sock, &c, 1);
-
- write(pw_sock, &style, 1);
- write(pw_sock, &len, sizeof len);
- write(pw_sock, name, len);
- read (pw_sock, &code, sizeof code);
- read (pw_sock, result, sizeof *result);
-
- return code!=0;
+ return (TEMP_FAILURE_RETRY(read (sync_sock, &c, 1))==1 &&
+ TEMP_FAILURE_RETRY(write(pw_sock, &style, 1))==1 &&
+ TEMP_FAILURE_RETRY(write(pw_sock, &len, sizeof len))==sizeof(len) &&
+ TEMP_FAILURE_RETRY(write(pw_sock, name, len))==(ssize_t)(len) &&
+ TEMP_FAILURE_RETRY(read (pw_sock, &code, sizeof code))==sizeof(code) &&
+ TEMP_FAILURE_RETRY(read (pw_sock, result, sizeof *result))==sizeof(*result) &&
+ code!=0);
}
struct passwd *
{
if (pw_sock==-1) return getpwnam_func(name);
else {
+ uint32_t id;
static struct passwd res = {
.pw_passwd = "*",
.pw_gid = -1,
};
res.pw_name = (char *)(name);
- if (!doPwStringRequest(&res.pw_uid, 'P', name)) return 0;
+ if (!doPwStringRequest(&id, 'P', name)) return 0;
+ res.pw_uid = id;
return &res;
}
{
if (pw_sock==-1) return getgrnam_func(name);
else {
+ uint32_t id;
static struct group res = {
.gr_passwd = "*",
.gr_mem = 0
};
res.gr_name = (char *)(name);
- if (!doPwStringRequest(&res.gr_gid, 'G', name)) return 0;
+ if (!doPwStringRequest(&id, 'G', name)) return 0;
+ res.gr_gid = id;
return &res;
}
endgrent()
{
if (pw_sock==-1) endgrent_func();
+ TEMP_FAILURE_RETRY(write(pw_sock, "Cg", 2));
}
void
endpwent()
{
if (pw_sock==-1) endpwent_func();
+ TEMP_FAILURE_RETRY(write(pw_sock, "Cp", 2));
}
return removeNamespaceMounts(filename, argv, envp);
}
+
+int
+is_selinux_enabled()
+{
+ return 0;
+}