diff options
| author | Saul Wold <sgw@linux.intel.com> | 2014-11-19 10:22:52 -0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-12-03 12:23:58 +0000 |
| commit | bc9adc175b63ff6cb4f06b0c80edc777c126d90c (patch) | |
| tree | 4a49f7e5cc6c5f422e9128641d4676477baf4a02 | |
| parent | 85c476188ae7305269b4a1d394e4fe99024ae372 (diff) | |
| download | poky-bc9adc175b63ff6cb4f06b0c80edc777c126d90c.tar.gz | |
pseudo: remove older version and patches
(From OE-Core rev: 73f418ce10a801f0befc06ffe54864563aea986c)
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
6 files changed, 0 insertions, 571 deletions
diff --git a/meta/recipes-devtools/pseudo/files/0001-pseudo_has_unload-add-function.patch b/meta/recipes-devtools/pseudo/files/0001-pseudo_has_unload-add-function.patch deleted file mode 100644 index b5c81c9d3e..0000000000 --- a/meta/recipes-devtools/pseudo/files/0001-pseudo_has_unload-add-function.patch +++ /dev/null | |||
| @@ -1,190 +0,0 @@ | |||
| 1 | From be97cb958f2934fa398fc8e344b25b84ebd4e90c Mon Sep 17 00:00:00 2001 | ||
| 2 | From: "Peter A. Bigot" <pab@pabigot.com> | ||
| 3 | Date: Sun, 25 Aug 2013 19:22:09 -0500 | ||
| 4 | Subject: [PATCH] pseudo_has_unload: add function | ||
| 5 | |||
| 6 | Various wrappers checked for a non-null pseudo_get_value("PSEUDO_UNLOAD") to | ||
| 7 | determine whether the environment should include the pseudo variables. None | ||
| 8 | of those checks freed the returned value when it was not null. The new | ||
| 9 | check function does. | ||
| 10 | |||
| 11 | The new check function also sees whether PSEUDO_UNLOAD was defined in the | ||
| 12 | environment that should be used in the wrapped system call. This allows | ||
| 13 | pkg_postinst scripts to strip out the LD_PRELOAD setting, for example before | ||
| 14 | invoking qemu to execute commands in an environment that does not have | ||
| 15 | libpseudo.so. | ||
| 16 | |||
| 17 | [YOCTO #4843] | ||
| 18 | |||
| 19 | Upstream-Status: Pending | ||
| 20 | Signed-off-by: Peter A. Bigot <pab@pabigot.com> | ||
| 21 | --- | ||
| 22 | ports/common/guts/execv.c | 2 +- | ||
| 23 | ports/common/guts/execve.c | 2 +- | ||
| 24 | ports/common/guts/execvp.c | 2 +- | ||
| 25 | ports/common/guts/fork.c | 2 +- | ||
| 26 | ports/linux/newclone/pseudo_wrappers.c | 2 +- | ||
| 27 | ports/linux/oldclone/pseudo_wrappers.c | 2 +- | ||
| 28 | ports/unix/guts/popen.c | 2 +- | ||
| 29 | ports/unix/guts/system.c | 2 +- | ||
| 30 | pseudo.h | 1 + | ||
| 31 | pseudo_util.c | 27 +++++++++++++++++++++++++++ | ||
| 32 | 10 files changed, 36 insertions(+), 8 deletions(-) | ||
| 33 | |||
| 34 | diff --git a/ports/common/guts/execv.c b/ports/common/guts/execv.c | ||
| 35 | index 763e1f9..3e1f820 100644 | ||
| 36 | --- a/ports/common/guts/execv.c | ||
| 37 | +++ b/ports/common/guts/execv.c | ||
| 38 | @@ -19,7 +19,7 @@ | ||
| 39 | } | ||
| 40 | |||
| 41 | pseudo_setupenv(); | ||
| 42 | - if (pseudo_get_value("PSEUDO_UNLOAD")) | ||
| 43 | + if (pseudo_has_unload(NULL)) | ||
| 44 | pseudo_dropenv(); | ||
| 45 | |||
| 46 | /* if exec() fails, we may end up taking signals unexpectedly... | ||
| 47 | diff --git a/ports/common/guts/execve.c b/ports/common/guts/execve.c | ||
| 48 | index a003657..ff6a44e 100644 | ||
| 49 | --- a/ports/common/guts/execve.c | ||
| 50 | +++ b/ports/common/guts/execve.c | ||
| 51 | @@ -20,7 +20,7 @@ | ||
| 52 | } | ||
| 53 | |||
| 54 | new_environ = pseudo_setupenvp(envp); | ||
| 55 | - if (pseudo_get_value("PSEUDO_UNLOAD")) | ||
| 56 | + if (pseudo_has_unload(new_environ)) | ||
| 57 | new_environ = pseudo_dropenvp(new_environ); | ||
| 58 | |||
| 59 | /* if exec() fails, we may end up taking signals unexpectedly... | ||
| 60 | diff --git a/ports/common/guts/execvp.c b/ports/common/guts/execvp.c | ||
| 61 | index 5e75be7..04253c3 100644 | ||
| 62 | --- a/ports/common/guts/execvp.c | ||
| 63 | +++ b/ports/common/guts/execvp.c | ||
| 64 | @@ -20,7 +20,7 @@ | ||
| 65 | } | ||
| 66 | |||
| 67 | pseudo_setupenv(); | ||
| 68 | - if (pseudo_get_value("PSEUDO_UNLOAD")) | ||
| 69 | + if (pseudo_has_unload(NULL)) | ||
| 70 | pseudo_dropenv(); | ||
| 71 | |||
| 72 | /* if exec() fails, we may end up taking signals unexpectedly... | ||
| 73 | diff --git a/ports/common/guts/fork.c b/ports/common/guts/fork.c | ||
| 74 | index df8abd7..bebe3b0 100644 | ||
| 75 | --- a/ports/common/guts/fork.c | ||
| 76 | +++ b/ports/common/guts/fork.c | ||
| 77 | @@ -12,7 +12,7 @@ | ||
| 78 | */ | ||
| 79 | if (rc == 0) { | ||
| 80 | pseudo_setupenv(); | ||
| 81 | - if (!pseudo_get_value("PSEUDO_UNLOAD")) { | ||
| 82 | + if (!pseudo_has_unload(NULL)) { | ||
| 83 | pseudo_reinit_libpseudo(); | ||
| 84 | } else { | ||
| 85 | pseudo_dropenv(); | ||
| 86 | diff --git a/ports/linux/newclone/pseudo_wrappers.c b/ports/linux/newclone/pseudo_wrappers.c | ||
| 87 | index 9dbac42..257e8bb 100644 | ||
| 88 | --- a/ports/linux/newclone/pseudo_wrappers.c | ||
| 89 | +++ b/ports/linux/newclone/pseudo_wrappers.c | ||
| 90 | @@ -28,7 +28,7 @@ int wrap_clone_child(void *args) { | ||
| 91 | |||
| 92 | if (!(flags & CLONE_VM)) { | ||
| 93 | pseudo_setupenv(); | ||
| 94 | - if (!pseudo_get_value("PSEUDO_UNLOAD")) { | ||
| 95 | + if (!pseudo_has_unload(NULL)) { | ||
| 96 | pseudo_reinit_libpseudo(); | ||
| 97 | } else { | ||
| 98 | pseudo_dropenv(); | ||
| 99 | diff --git a/ports/linux/oldclone/pseudo_wrappers.c b/ports/linux/oldclone/pseudo_wrappers.c | ||
| 100 | index c0ce5dd..598d966 100644 | ||
| 101 | --- a/ports/linux/oldclone/pseudo_wrappers.c | ||
| 102 | +++ b/ports/linux/oldclone/pseudo_wrappers.c | ||
| 103 | @@ -22,7 +22,7 @@ int wrap_clone_child(void *args) { | ||
| 104 | |||
| 105 | if (!(flags & CLONE_VM)) { | ||
| 106 | pseudo_setupenv(); | ||
| 107 | - if (!pseudo_get_value("PSEUDO_UNLOAD")) { | ||
| 108 | + if (!pseudo_has_unload(NULL)) { | ||
| 109 | pseudo_reinit_libpseudo(); | ||
| 110 | } else { | ||
| 111 | pseudo_dropenv(); | ||
| 112 | diff --git a/ports/unix/guts/popen.c b/ports/unix/guts/popen.c | ||
| 113 | index 0ca16b0..5d44c0e 100644 | ||
| 114 | --- a/ports/unix/guts/popen.c | ||
| 115 | +++ b/ports/unix/guts/popen.c | ||
| 116 | @@ -9,7 +9,7 @@ | ||
| 117 | * in ways that avoid our usual enforcement of the environment. | ||
| 118 | */ | ||
| 119 | pseudo_setupenv(); | ||
| 120 | - if (pseudo_get_value("PSEUDO_UNLOAD")) | ||
| 121 | + if (pseudo_has_unload(NULL)) | ||
| 122 | pseudo_dropenv(); | ||
| 123 | |||
| 124 | rc = real_popen(command, mode); | ||
| 125 | diff --git a/ports/unix/guts/system.c b/ports/unix/guts/system.c | ||
| 126 | index 028b372..6351592 100644 | ||
| 127 | --- a/ports/unix/guts/system.c | ||
| 128 | +++ b/ports/unix/guts/system.c | ||
| 129 | @@ -9,7 +9,7 @@ | ||
| 130 | return 1; | ||
| 131 | |||
| 132 | pseudo_setupenv(); | ||
| 133 | - if (pseudo_get_value("PSEUDO_UNLOAD")) | ||
| 134 | + if (pseudo_has_unload(NULL)) | ||
| 135 | pseudo_dropenv(); | ||
| 136 | |||
| 137 | rc = real_system(command); | ||
| 138 | diff --git a/pseudo.h b/pseudo.h | ||
| 139 | index 56760a4..f600793 100644 | ||
| 140 | --- a/pseudo.h | ||
| 141 | +++ b/pseudo.h | ||
| 142 | @@ -28,6 +28,7 @@ extern void pseudo_init_client(void); | ||
| 143 | void pseudo_dump_env(char **envp); | ||
| 144 | int pseudo_set_value(const char *key, const char *value); | ||
| 145 | char *pseudo_get_value(const char *key); | ||
| 146 | +int pseudo_has_unload(char * const *envp); | ||
| 147 | |||
| 148 | #include "pseudo_tables.h" | ||
| 149 | |||
| 150 | diff --git a/pseudo_util.c b/pseudo_util.c | ||
| 151 | index 8d0969e..16c70e0 100644 | ||
| 152 | --- a/pseudo_util.c | ||
| 153 | +++ b/pseudo_util.c | ||
| 154 | @@ -95,6 +95,33 @@ dump_env(char **envp) { | ||
| 155 | } | ||
| 156 | #endif | ||
| 157 | |||
| 158 | +int | ||
| 159 | +pseudo_has_unload(char * const *envp) { | ||
| 160 | + static const char unload[] = "PSEUDO_UNLOAD"; | ||
| 161 | + static size_t unload_len = strlen(unload); | ||
| 162 | + size_t i = 0; | ||
| 163 | + | ||
| 164 | + /* Is it in the caller environment? */ | ||
| 165 | + if (NULL != getenv(unload)) | ||
| 166 | + return 1; | ||
| 167 | + | ||
| 168 | + /* Is it in the environment cache? */ | ||
| 169 | + if (pseudo_util_initted == -1) | ||
| 170 | + pseudo_init_util(); | ||
| 171 | + while (pseudo_env[i].key && strcmp(pseudo_env[i].key, unload)) | ||
| 172 | + ++i; | ||
| 173 | + if (pseudo_env[i].key && pseudo_env[i].value) | ||
| 174 | + return 1; | ||
| 175 | + | ||
| 176 | + /* Is it in the operational environment? */ | ||
| 177 | + while (envp && *envp) { | ||
| 178 | + if ((!strncmp(*envp, unload, unload_len)) && ('=' == (*envp)[unload_len])) | ||
| 179 | + return 1; | ||
| 180 | + ++envp; | ||
| 181 | + } | ||
| 182 | + return 0; | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | /* Caller must free memory! */ | ||
| 186 | char * | ||
| 187 | pseudo_get_value(const char *key) { | ||
| 188 | -- | ||
| 189 | 1.7.9.5 | ||
| 190 | |||
diff --git a/meta/recipes-devtools/pseudo/files/pseudo-1.5.1-install-directory-mode.patch b/meta/recipes-devtools/pseudo/files/pseudo-1.5.1-install-directory-mode.patch deleted file mode 100644 index e8eaf13f74..0000000000 --- a/meta/recipes-devtools/pseudo/files/pseudo-1.5.1-install-directory-mode.patch +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | Upstream-Status: Backport | ||
| 2 | |||
| 3 | when install command sets the created directory mode, pseudo will change | ||
| 4 | the mode of the directory to 0700 incorrectly. | ||
| 5 | |||
| 6 | Signed-off-by: yanjun.zhu <yanjun.zhu@windriver.com> | ||
| 7 | Signed-off-by: Kai Kang <kai.kang@windriver.com> | ||
| 8 | |||
| 9 | --- a/ports/unix/guts/mkdirat.c | ||
| 10 | +++ b/ports/unix/guts/mkdirat.c | ||
| 11 | @@ -25,6 +25,7 @@ | ||
| 12 | stat_rc = base_fstatat(dirfd, path, &buf, AT_SYMLINK_NOFOLLOW); | ||
| 13 | #endif | ||
| 14 | if (stat_rc != -1) { | ||
| 15 | + buf.st_mode = PSEUDO_DB_MODE(buf.st_mode, mode); | ||
| 16 | pseudo_client_op(OP_MKDIR, 0, -1, dirfd, path, &buf); | ||
| 17 | } else { | ||
| 18 | pseudo_debug(1, "mkdir of %s succeeded, but stat failed: %s\n", | ||
diff --git a/meta/recipes-devtools/pseudo/files/pseudo-fchmodat-permissions.patch b/meta/recipes-devtools/pseudo/files/pseudo-fchmodat-permissions.patch deleted file mode 100644 index 7b1f82d577..0000000000 --- a/meta/recipes-devtools/pseudo/files/pseudo-fchmodat-permissions.patch +++ /dev/null | |||
| @@ -1,264 +0,0 @@ | |||
| 1 | commit 7e67d082737b3df4788caf85fedd607b3acd9786 | ||
| 2 | Author: Peter Seebach <peter.seebach@windriver.com> | ||
| 3 | Date: Fri May 16 15:53:06 2014 -0500 | ||
| 4 | |||
| 5 | permissions updates: improve fchmodat, mask out write bits | ||
| 6 | |||
| 7 | Upstream-Status: Backport of several patches from 1.6 branch, | ||
| 8 | combined. | ||
| 9 | |||
| 10 | Backport from pseudo 1.6 of improvements to fchmodat (handle | ||
| 11 | AT_SYMLINK_NOFOLLOW by rejecting it if the host system does, | ||
| 12 | to make GNU tar happier), also mask out write bits from filesystem | ||
| 13 | modes to avoid security problems. | ||
| 14 | |||
| 15 | Also start tracking umask so we can use the right modes for | ||
| 16 | open, mkdir, and mknod. | ||
| 17 | |||
| 18 | The 1.6 patches are: | ||
| 19 | |||
| 20 | 87c53ea58befef48677846693aab445df1850e16 | ||
| 21 | 3c716e0bab4f0cfe4be84caa9ce5fd5e3f5e2a23 | ||
| 22 | c98e4f43b5d6499748a5057134408f4ba4854fb4 | ||
| 23 | 2f71a021b725c1aa415439209a89327f0b997d02 | ||
| 24 | 14925786b55202d8147b0af719038e8a23ef73c0 | ||
| 25 | |||
| 26 | diff --git a/ChangeLog.txt b/ChangeLog.txt | ||
| 27 | index 113f675..cc966ce 100644 | ||
| 28 | --- a/ChangeLog.txt | ||
| 29 | +++ b/ChangeLog.txt | ||
| 30 | @@ -1,3 +1,18 @@ | ||
| 31 | +2014-05-27: | ||
| 32 | + * (seebs) start noticing umask, mask it out from open or mkdir | ||
| 33 | + calls rather than relying on underlying open/mkdir to do it. | ||
| 34 | + | ||
| 35 | +2014-05-16: | ||
| 36 | + * (seebs) fchmodat: don't drop flags, report failures, to improve | ||
| 37 | + compatibility/consistency. Cache the knowledge that | ||
| 38 | + AT_SYMLINK_NOFOLLOW gets ENOTSUP. | ||
| 39 | + * (seebs) mask out group/other write bits in real filesystem to | ||
| 40 | + reduce risks when assembling a rootfs including world-writeable | ||
| 41 | + directories. | ||
| 42 | + | ||
| 43 | +2014-05-15: | ||
| 44 | + * (seebs) drop flags when calling fchmodat() to appease GNU tar. | ||
| 45 | + | ||
| 46 | 2013-02-27: | ||
| 47 | * (seebs) Oh, hey, what if I took out my debug messages? | ||
| 48 | * (seebs) update docs a bit to reduce bitrot | ||
| 49 | diff --git a/makewrappers b/makewrappers | ||
| 50 | index e87cc56..0127766 100755 | ||
| 51 | --- a/makewrappers | ||
| 52 | +++ b/makewrappers | ||
| 53 | @@ -204,6 +204,7 @@ class Function: | ||
| 54 | 'uid_t': '0', | ||
| 55 | 'int': '-1', | ||
| 56 | 'long': '-1', | ||
| 57 | + 'mode_t': '0', | ||
| 58 | 'ssize_t': '-1' | ||
| 59 | } | ||
| 60 | |||
| 61 | diff --git a/ports/darwin/guts/open.c b/ports/darwin/guts/open.c | ||
| 62 | index c66cc15..520bb70 100644 | ||
| 63 | --- a/ports/darwin/guts/open.c | ||
| 64 | +++ b/ports/darwin/guts/open.c | ||
| 65 | @@ -9,6 +9,9 @@ | ||
| 66 | struct stat buf = { }; | ||
| 67 | int existed = 1; | ||
| 68 | int save_errno; | ||
| 69 | + | ||
| 70 | + /* mask out mode bits appropriately */ | ||
| 71 | + mode = mode & ~pseudo_umask; | ||
| 72 | #ifdef PSEUDO_FORCE_ASYNCH | ||
| 73 | flags &= ~O_SYNC; | ||
| 74 | #endif | ||
| 75 | diff --git a/ports/linux/guts/__xmknodat.c b/ports/linux/guts/__xmknodat.c | ||
| 76 | index 59b4f2f..0888b8a 100644 | ||
| 77 | --- a/ports/linux/guts/__xmknodat.c | ||
| 78 | +++ b/ports/linux/guts/__xmknodat.c | ||
| 79 | @@ -9,6 +9,9 @@ | ||
| 80 | pseudo_msg_t *msg; | ||
| 81 | struct stat64 buf; | ||
| 82 | |||
| 83 | + /* mask out mode bits appropriately */ | ||
| 84 | + mode = mode & ~pseudo_umask; | ||
| 85 | + | ||
| 86 | /* we don't use underlying call, so _ver is irrelevant to us */ | ||
| 87 | (void) ver; | ||
| 88 | |||
| 89 | diff --git a/ports/linux/guts/openat.c b/ports/linux/guts/openat.c | ||
| 90 | index 8460073..4053549 100644 | ||
| 91 | --- a/ports/linux/guts/openat.c | ||
| 92 | +++ b/ports/linux/guts/openat.c | ||
| 93 | @@ -10,6 +10,9 @@ | ||
| 94 | int existed = 1; | ||
| 95 | int save_errno; | ||
| 96 | |||
| 97 | + /* mask out mode bits appropriately */ | ||
| 98 | + mode = mode & ~pseudo_umask; | ||
| 99 | + | ||
| 100 | #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS | ||
| 101 | if (dirfd != AT_FDCWD) { | ||
| 102 | errno = ENOSYS; | ||
| 103 | diff --git a/ports/unix/guts/fchmodat.c b/ports/unix/guts/fchmodat.c | ||
| 104 | index 59a92ce..69a953c 100644 | ||
| 105 | --- a/ports/unix/guts/fchmodat.c | ||
| 106 | +++ b/ports/unix/guts/fchmodat.c | ||
| 107 | @@ -8,6 +8,7 @@ | ||
| 108 | */ | ||
| 109 | PSEUDO_STATBUF buf; | ||
| 110 | int save_errno = errno; | ||
| 111 | + static int picky_fchmodat = 0; | ||
| 112 | |||
| 113 | #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS | ||
| 114 | if (dirfd != AT_FDCWD) { | ||
| 115 | @@ -15,6 +16,16 @@ | ||
| 116 | return -1; | ||
| 117 | } | ||
| 118 | if (flags & AT_SYMLINK_NOFOLLOW) { | ||
| 119 | + /* Linux, as of this writing, will always reject this. | ||
| 120 | + * GNU tar relies on getting the rejection. To cut down | ||
| 121 | + * on traffic, we check for the failure, and if we saw | ||
| 122 | + * a failure previously, we reject it right away and tell | ||
| 123 | + * the caller to retry. | ||
| 124 | + */ | ||
| 125 | + if (picky_fchmodat) { | ||
| 126 | + errno = ENOTSUP; | ||
| 127 | + return -1; | ||
| 128 | + } | ||
| 129 | rc = base_lstat(path, &buf); | ||
| 130 | } else { | ||
| 131 | rc = base_stat(path, &buf); | ||
| 132 | @@ -50,13 +61,22 @@ | ||
| 133 | |||
| 134 | /* user bits added so "root" can always access files. */ | ||
| 135 | #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS | ||
| 136 | - /* note: if path was a symlink, and AT_NOFOLLOW_SYMLINKS was | ||
| 137 | + /* note: if path was a symlink, and AT_SYMLINK_NOFOLLOW was | ||
| 138 | * specified, we already bailed previously. */ | ||
| 139 | real_chmod(path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode))); | ||
| 140 | #else | ||
| 141 | - real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), flags); | ||
| 142 | + rc = real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), flags); | ||
| 143 | + /* AT_SYMLINK_NOFOLLOW isn't supported by fchmodat. GNU tar | ||
| 144 | + * tries to use it anyway, figuring it can just retry if that | ||
| 145 | + * fails. So we want to report that *particular* failure instead | ||
| 146 | + * of doing the fallback. | ||
| 147 | + */ | ||
| 148 | + if (rc == -1 && errno == ENOTSUP && (flags & AT_SYMLINK_NOFOLLOW)) { | ||
| 149 | + picky_fchmodat = 1; | ||
| 150 | + return -1; | ||
| 151 | + } | ||
| 152 | #endif | ||
| 153 | - /* we ignore a failure from underlying fchmod, because pseudo | ||
| 154 | + /* we otherwise ignore failures from underlying fchmod, because pseudo | ||
| 155 | * may believe you are permitted to change modes that the filesystem | ||
| 156 | * doesn't. Note that we also don't need to know whether the | ||
| 157 | * file might be a (pseudo) block device or some such; pseudo | ||
| 158 | diff --git a/ports/unix/guts/mkdirat.c b/ports/unix/guts/mkdirat.c | ||
| 159 | index e846b70..e0b6af9 100644 | ||
| 160 | --- a/ports/unix/guts/mkdirat.c | ||
| 161 | +++ b/ports/unix/guts/mkdirat.c | ||
| 162 | @@ -6,11 +6,14 @@ | ||
| 163 | * wrap_mkdirat(int dirfd, const char *path, mode_t mode) { | ||
| 164 | * int rc = -1; | ||
| 165 | */ | ||
| 166 | + /* mask out mode bits appropriately */ | ||
| 167 | + mode = mode & ~pseudo_umask; | ||
| 168 | #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS | ||
| 169 | if (dirfd != AT_FDCWD) { | ||
| 170 | errno = ENOSYS; | ||
| 171 | return -1; | ||
| 172 | } | ||
| 173 | + | ||
| 174 | rc = real_mkdir(path, PSEUDO_FS_MODE(mode, 1)); | ||
| 175 | #else | ||
| 176 | rc = real_mkdirat(dirfd, path, PSEUDO_FS_MODE(mode, 1)); | ||
| 177 | diff --git a/ports/unix/guts/mknodat.c b/ports/unix/guts/mknodat.c | ||
| 178 | index 6fd5b42..5d8d47c 100644 | ||
| 179 | --- a/ports/unix/guts/mknodat.c | ||
| 180 | +++ b/ports/unix/guts/mknodat.c | ||
| 181 | @@ -10,6 +10,9 @@ | ||
| 182 | PSEUDO_STATBUF buf; | ||
| 183 | int save_errno = errno; | ||
| 184 | |||
| 185 | + /* mask out mode bits appropriately */ | ||
| 186 | + mode = mode & ~pseudo_umask; | ||
| 187 | + | ||
| 188 | #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS | ||
| 189 | if (dirfd != AT_FDCWD) { | ||
| 190 | errno = ENOSYS; | ||
| 191 | diff --git a/ports/unix/guts/umask.c b/ports/unix/guts/umask.c | ||
| 192 | new file mode 100644 | ||
| 193 | index 0000000..6b060d3 | ||
| 194 | --- /dev/null | ||
| 195 | +++ b/ports/unix/guts/umask.c | ||
| 196 | @@ -0,0 +1,14 @@ | ||
| 197 | +/* | ||
| 198 | + * Copyright (c) 2014 Wind River Systems; see | ||
| 199 | + * guts/COPYRIGHT for information. | ||
| 200 | + * | ||
| 201 | + * mode_t umask(mode_t mask) | ||
| 202 | + * mode_t rc = 0; | ||
| 203 | + */ | ||
| 204 | + | ||
| 205 | + pseudo_umask = mask; | ||
| 206 | + rc = real_umask(mask); | ||
| 207 | + | ||
| 208 | +/* return rc; | ||
| 209 | + * } | ||
| 210 | + */ | ||
| 211 | diff --git a/ports/unix/wrapfuncs.in b/ports/unix/wrapfuncs.in | ||
| 212 | index 8460a65..e0e9739 100644 | ||
| 213 | --- a/ports/unix/wrapfuncs.in | ||
| 214 | +++ b/ports/unix/wrapfuncs.in | ||
| 215 | @@ -67,3 +67,4 @@ void sync(void); /* async_skip= */ | ||
| 216 | int syncfs(int fd); /* async_skip=0 */ | ||
| 217 | int sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags); /* async_skip=0 */ | ||
| 218 | int msync(void *addr, size_t length, int flags); /* async_skip=0 */ | ||
| 219 | +mode_t umask(mode_t mask); | ||
| 220 | diff --git a/pseudo_client.c b/pseudo_client.c | ||
| 221 | index b6d11a6..535c810 100644 | ||
| 222 | --- a/pseudo_client.c | ||
| 223 | +++ b/pseudo_client.c | ||
| 224 | @@ -71,6 +71,8 @@ int pseudo_disabled = 0; | ||
| 225 | int pseudo_allow_fsync = 0; | ||
| 226 | static int pseudo_local_only = 0; | ||
| 227 | |||
| 228 | +int pseudo_umask = 022; | ||
| 229 | + | ||
| 230 | static char **fd_paths = NULL; | ||
| 231 | static int nfds = 0; | ||
| 232 | static int messages = 0; | ||
| 233 | @@ -219,6 +221,9 @@ pseudo_init_client(void) { | ||
| 234 | if (!pseudo_disabled && !pseudo_inited) { | ||
| 235 | char *pseudo_path = 0; | ||
| 236 | |||
| 237 | + pseudo_umask = umask(022); | ||
| 238 | + umask(pseudo_umask); | ||
| 239 | + | ||
| 240 | pseudo_path = pseudo_prefix_path(NULL); | ||
| 241 | if (pseudo_prefix_dir_fd == -1) { | ||
| 242 | if (pseudo_path) { | ||
| 243 | diff --git a/pseudo_client.h b/pseudo_client.h | ||
| 244 | index f36a772..5bf820e 100644 | ||
| 245 | --- a/pseudo_client.h | ||
| 246 | +++ b/pseudo_client.h | ||
| 247 | @@ -72,6 +72,8 @@ extern char *pseudo_passwd; | ||
| 248 | extern size_t pseudo_chroot_len; | ||
| 249 | extern int pseudo_nosymlinkexp; | ||
| 250 | |||
| 251 | +extern int pseudo_umask; | ||
| 252 | + | ||
| 253 | /* Root can read and write files, and enter directories which have no | ||
| 254 | * read, write, or execute permissions. (But can't execute files without | ||
| 255 | * execute permissions!) | ||
| 256 | @@ -85,6 +87,6 @@ extern int pseudo_nosymlinkexp; | ||
| 257 | * None of this will behave very sensibly if umask has 0700 bits in it; | ||
| 258 | * this is a known limitation. | ||
| 259 | */ | ||
| 260 | -#define PSEUDO_FS_MODE(mode, isdir) ((mode) | S_IRUSR | S_IWUSR | ((isdir) ? S_IXUSR : 0)) | ||
| 261 | -#define PSEUDO_DB_MODE(fs_mode, user_mode) (((fs_mode) & ~0700) | ((user_mode & 0700))) | ||
| 262 | +#define PSEUDO_FS_MODE(mode, isdir) (((mode) | S_IRUSR | S_IWUSR | ((isdir) ? S_IXUSR : 0)) & ~(S_IWGRP | S_IWOTH)) | ||
| 263 | +#define PSEUDO_DB_MODE(fs_mode, user_mode) (((fs_mode) & ~0722) | ((user_mode & 0722))) | ||
| 264 | |||
diff --git a/meta/recipes-devtools/pseudo/files/shutdownping.patch b/meta/recipes-devtools/pseudo/files/shutdownping.patch deleted file mode 100644 index 8af8e0b594..0000000000 --- a/meta/recipes-devtools/pseudo/files/shutdownping.patch +++ /dev/null | |||
| @@ -1,53 +0,0 @@ | |||
| 1 | There is a potential issue with the fastop code in pseudo since a process may | ||
| 2 | exit and allow some other function to run before the server has processed | ||
| 3 | the commands run by the process. Issues have been see with unpredictable | ||
| 4 | file permissions. | ||
| 5 | |||
| 6 | To avoid this, we ping the server before exitting which guarantees it has | ||
| 7 | processed the current command queue. | ||
| 8 | |||
| 9 | Debugged-by: RP | ||
| 10 | Fix written by peter.seebach@windriver.com | ||
| 11 | |||
| 12 | Upstream-Status: Submitted | ||
| 13 | |||
| 14 | [YOCTO #5132] | ||
| 15 | |||
| 16 | diff --git a/pseudo_client.c b/pseudo_client.c | ||
| 17 | index f58ce4c..20943b6 100644 | ||
| 18 | --- a/pseudo_client.c | ||
| 19 | +++ b/pseudo_client.c | ||
| 20 | @@ -75,6 +75,9 @@ static int nfds = 0; | ||
| 21 | static int messages = 0; | ||
| 22 | static struct timeval message_time = { .tv_sec = 0 }; | ||
| 23 | static int pseudo_inited = 0; | ||
| 24 | + | ||
| 25 | +static int sent_messages = 0; | ||
| 26 | + | ||
| 27 | int pseudo_nosymlinkexp = 0; | ||
| 28 | |||
| 29 | /* note: these are int, not uid_t/gid_t, so I can use 'em with scanf */ | ||
| 30 | @@ -711,6 +714,11 @@ client_ping(void) { | ||
| 31 | return 0; | ||
| 32 | } | ||
| 33 | |||
| 34 | +static void | ||
| 35 | +void_client_ping(void) { | ||
| 36 | + client_ping(); | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | int | ||
| 40 | pseudo_fd(int fd, int how) { | ||
| 41 | int newfd; | ||
| 42 | @@ -1043,6 +1051,11 @@ pseudo_client_op(pseudo_op_t op, int access, int fd, int dirfd, const char *path | ||
| 43 | /* disable wrappers */ | ||
| 44 | pseudo_antimagic(); | ||
| 45 | |||
| 46 | + if (!sent_messages) { | ||
| 47 | + sent_messages = 1; | ||
| 48 | + atexit(void_client_ping); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | if (op == OP_RENAME) { | ||
| 52 | va_list ap; | ||
| 53 | va_start(ap, buf); | ||
diff --git a/meta/recipes-devtools/pseudo/files/symver.patch b/meta/recipes-devtools/pseudo/files/symver.patch deleted file mode 100644 index 8d1b377ec0..0000000000 --- a/meta/recipes-devtools/pseudo/files/symver.patch +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | When running as pseudo-nativesdk, we might need to run host binaries | ||
| 2 | linked against the host libc. Having a 2.14 libc dependency from memcpy is | ||
| 3 | problematic so instruct the linker to use older symbols. | ||
| 4 | |||
| 5 | Upstream-Status: Pending | ||
| 6 | |||
| 7 | RP 2012/4/22 | ||
| 8 | |||
| 9 | Index: pseudo-1.3/pseudo.h | ||
| 10 | =================================================================== | ||
| 11 | --- pseudo-1.3.orig/pseudo.h 2012-04-22 12:17:59.078909060 +0000 | ||
| 12 | +++ pseudo-1.3/pseudo.h 2012-04-22 12:32:42.954888587 +0000 | ||
| 13 | @@ -29,6 +29,13 @@ | ||
| 14 | int pseudo_set_value(const char *key, const char *value); | ||
| 15 | char *pseudo_get_value(const char *key); | ||
| 16 | |||
| 17 | +#ifdef __amd64__ | ||
| 18 | +#define GLIBC_COMPAT_SYMBOL(SYM) __asm__(".symver " #SYM "," #SYM "@GLIBC_2.2.5") | ||
| 19 | +#else | ||
| 20 | +#define GLIBC_COMPAT_SYMBOL(SYM) __asm__(".symver " #SYM "," #SYM "@GLIBC_2.0") | ||
| 21 | +#endif | ||
| 22 | +GLIBC_COMPAT_SYMBOL(memcpy); | ||
| 23 | + | ||
| 24 | #include "pseudo_tables.h" | ||
| 25 | |||
| 26 | extern void pseudo_debug_verbose(void); | ||
diff --git a/meta/recipes-devtools/pseudo/pseudo_1.5.1.bb b/meta/recipes-devtools/pseudo/pseudo_1.5.1.bb deleted file mode 100644 index 8d562ecbf7..0000000000 --- a/meta/recipes-devtools/pseudo/pseudo_1.5.1.bb +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | require pseudo.inc | ||
| 2 | |||
| 3 | PR = "r5" | ||
| 4 | |||
| 5 | SRC_URI = " \ | ||
| 6 | http://www.yoctoproject.org/downloads/${BPN}/${BPN}-${PV}.tar.bz2 \ | ||
| 7 | file://0001-pseudo_has_unload-add-function.patch \ | ||
| 8 | file://shutdownping.patch \ | ||
| 9 | file://pseudo-1.5.1-install-directory-mode.patch \ | ||
| 10 | file://pseudo-fchmodat-permissions.patch \ | ||
| 11 | " | ||
| 12 | |||
| 13 | SRC_URI_append_class-nativesdk = " file://symver.patch" | ||
| 14 | |||
| 15 | SRC_URI_append_class-native = " file://symver.patch" | ||
| 16 | |||
| 17 | SRC_URI[md5sum] = "5ec67c7bff5fe68c56de500859c19172" | ||
| 18 | SRC_URI[sha256sum] = "3b896f592f4d568569bd02323fad2d6b8c398e16ca36ee5a8947d2ff6c1d3d52" | ||
| 19 | |||
| 20 | PSEUDO_EXTRA_OPTS ?= "--enable-force-async" | ||
