AgeCommit message (Collapse)AuthorFilesLines
2011-07-19Call this 1.1.2pseudo-1.1.2PSEUDO_1_1_2Peter Seebach2-1/+2
2011-07-19Fix uninitalized variable.Peter Seebach2-1/+5
You might be wondering why this wasn't caught. Answer: gcc's too smart. Consider: int x; if (condition) x = 23; return x; This function will just return 23. Since gcc knows that it doesn't matter what happens if x is used uninitialized (it's an indeterminate value, thus a possible trap representation, thus undefined behavior to use it), it simplifies the initial part of this away. Thus there's no use of an uninitialized value. Something similar seems to be at issue with the use of the uninitialized f in pseudo_init_one_wrapper. The variable wasn't initialized in the pre-realpath-fix version either, but in that version, the assignment from dlsym was completely unconditional.
2011-06-09Fix realpath(name, NULL) when PSEUDO_DISABLED=1Peter Seebach5-28/+52
On some Linux systems, dlsym("realpath", RTLD_NEXT) prefers for reasons of its own to give a symbol that is also known as old_realpath, which fails and yields EINVAL when called with a null pointer as the second argument. This can be avoided, on some systems, by using dlvsym() to request the GLIBC_2.3 version of the symbol. The wrapper logic is enhanced to allow for specifying versions, although this currently only works for Linux (Darwin has no dlvsym, apparently?). The test case is a trivial program which calls realpath(name, NULL) run with PSEUDO_DISABLED=1.
2011-06-061.1.1 releasePeter Seebach2-1/+17
2011-06-06Improve system()Peter Seebach2-20/+6
2011-06-02Call this "version 1.1".Peter Seebach2-1/+3
2011-06-02Add system() wrapper to force setup of the pseudo environment. NotePeter Seebach4-0/+45
that we add an extra fork() so we can do the setup in a child process, but still just pass the command string to the standard system() call.
2011-05-31Change logic on file creation/chmod so that we only secretly mask inPeter Seebach9-20/+32
the 0100 bit for directories. The reason is that otherwise we create plain files which are 0700 on disk, which means they're non-zero &0111, which breaks euidaccess(X_OK).
2011-05-25Make ulckpwdf() report failuresSeebs4-4/+9
2011-05-02Merge pull request #1 from cgwalters/master.Peter Seebach2-5/+22
Build improvements (better compatibility with how other people do things)
2011-05-02configure: Ignore unknown argumentsColin Walters1-1/+1
This is what GNU configure does, for valid reasons. My build wrapper unconditionally passes --enable-maintainer-mode.
2011-05-02Accept --libdirColin Walters2-4/+21
The way multilib works on at least Fedora is that --libdir=$prefix/lib64 is passed to configure. The source build system should not attempt to guess at architecture or take other configure flags (like --bits); instead it should default to whatever the given $(CC) does. This patch preserves the ability to specify --bits however.
2011-04-21Fix hangs on Fedora 13 et al.Peter Seebach2-0/+14
2011-04-16Fix oldclone port, which had bit-rotted since it was developed.Peter Seebach2-2/+4
2011-04-13Fix path expansion of empty strings.Peter Seebach2-0/+6
2011-04-04Whitespace changes.Peter Seebach3-25/+28
2011-04-01mention Darwin in READMESeebs2-5/+5
2011-03-25Try to force debug fd to 2. The intent is that this will keep mallocPeter Seebach3-2/+15
debugger messages from going to the wrong place. No longer fclose(stderr) after grabbing log file, because stderr is likely still using fd 2.
2011-03-25Make subports/preports executable.Peter Seebach6-0/+1
2011-03-25Merge in ports workPeter Seebach215-929/+2554
This is a spiffied-up rebase of a bunch of intermediate changes, presented as a whole because it is, surprisingly, less confusing that way. The basic idea is to separate the guts code into categories ranging from generic stuff that can be the same everywhere and specific variants. The big scary one is the Darwin support, which actually seems to run okay on 64-bit OS X 10.6. (No other variants were tested.) The other example given is support for the old clone() syscall on RHEL 4, which affects some wrlinux use cases. There's a few minor cleanup bits here, such as a function with inconsistent calling conventions, but nothing really exciting.
2011-03-25Fix execvp crashPeter Seebach2-1/+4
2011-02-10Whoops! If LOCALSTATEDIR doesn't exist, and you invoke pseudoPeter Seebach3-0/+36
directly rather than via an on-demand spawn from the client, the directory is never created.
2011-02-09database initialization cleanup.Peter Seebach2-108/+146
2011-02-08Expand paths on exec.Peter Seebach7-7/+160
This is fussy, because we have to actually do the path search ourselves as best we can to handle unqualified paths. The result, though, is more meaningful logs. Along the way, fix some bitrot in the comments in pseudo_fix_path and friends.
2011-02-01... and pseudodb needs -ldlpseudo-1.0PSEUDO_1_0Peter Seebach1-1/+1
2011-02-01Oh, sqlite needs -lpthread sometimesPeter Seebach1-1/+1
2011-02-01Add performance test (rough draft).Peter Seebach3-0/+84
2011-02-01Fix linkage issues due to missing -ldlPeter Seebach1-6/+9
2011-01-24Revert "Add a cache of the last object found in pseudo_op"Mark Hatle2-192/+8
This reverts commit 49d4d35918d457b0e9206679ecad3b9c84f11e66.
2011-01-18Do not cache OP_EXEC callsMark Hatle2-2/+4
The cached data values were being collected when an OP_EXEC call was made. This is incorrect as the values are only for logging purposes. It's believed this caused an occasional crash in certain instances. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2011-01-14Automatically create state/prefix directoriesPeter Seebach2-2/+51
It'd be handy for the WR build system if new state directories could be created as needed. It is made so. And to answer the first question everyone, including me, has on reading this: You can't do system("mkdir -p ...") because the invoked shell would need to run under pseudo, so it'd have to check for a server, and...
2011-01-13ChangeLog for previous fixPeter Seebach1-0/+3
2011-01-13Fixup: The path code could double-free.Peter Seebach1-10/+31
The problem is that path_by_ino could end up being the same pointer as cache_path, after which, if cache_path were freed (or kept around for later), there would be malloc arena problems. Also, fix the calculation for pathlen to increase cache hits. The IPC messages use length of path *plus one* as the length, because the buffer is defined to include its terminating null byte.
2010-12-17Fix the msg cache codeMark Hatle1-0/+2
The pathlen that is cached could be wrong in certain operations (RENAME). Fix this by resetting it to the proper path length. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-17When pseudo is disabled avoid directory processing...Mark Hatle2-3/+10
When pseudo is disabled, we skip a bunch of the prefix, localstate, etc processing. This allows pseudo to run with a directory that does not yet exist. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16The maketables thing made it possible for some modules to get builtPeter Seebach2-0/+6
before pseudo_tables.h existed. Fixed.
2010-12-16update docs to eliminate claims that we don't have chrootPeter Seebach3-4/+5
2010-12-16Change the file journal from PERSIST to OFFMark Hatle2-1/+4
Changing the file journal to OFF, this makes things a bit more susceptible to failure in cases where pseudo crashes or the system crashes.. however, this is believed to be unlikely. Timing: Before: real 6m42.093s user 0m34.321s sys 2m46.086s (with journal set to MEMORY) real 6m33.037s user 0m33.133s sys 2m48.668s After (journal set to OFF) real 6m17.313s user 0m32.757s sys 2m47.654s Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16Optimize the sql database indexes differently...Mark Hatle2-6/+14
We change the index from simply "path" to "path, dev, ino". This allows for slightly faster searches for the exact file information, and does not cause any penalty for a simple "path" based search. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16Add a cache of the last object found in pseudo_opMark Hatle2-3/+169
Add a cache of the last object found in pseudo_op. Profiling has indiciated that many operations come in clusters. So instead of doing select, operation for each item in the cluster, we check to see if we already know the item and perform the op.. Performance improvement when processing 500k or so files: Previous: real 7m11.778s user 0m35.929s sys 2m46.723s This commit: real 6m42.093s user 0m34.321s sys 2m46.086s Also validation of the component can be added by compiling with NVALIDATE. This verifies the result of the cache is the same as what would have come from the database. Differences are logged to the standard pseudo.log. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16Restructure the pseudo_op file identificationMark Hatle2-24/+42
We restructure the pseudo_op file identification, which involves a fairly significant performance increase. The old method would do: if pdb_find_file_path: found_path = 1; if found_path && pdb_find_file_exact: found_ino = 1; else if pdb_find_file_dev: found_ino = 1; This resulted in at least two select calls for each file. One for "path" and one for exact or dev. The new method instead does: if pdb_find_file_exact: found_path = 1; found_ino = 1; else if pdb_find_file_path: found_path = 1; if pdb_find_file_dev: found_ino = 1; This shrinks the number of selects to either one or three. Potentially cutting the number of selects in half -- or increasing the number to three on an empty set... (Profiling has shown this is a net win) Timing numbers when manipulating a large number (500k) of files in a ramdisk: real 7m48.354s user 0m32.895s sys 2m50.274s After this change: real 7m11.778s user 0m35.929s sys 2m46.723s Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16Add sqlite call profilingMark Hatle3-1/+17
Add sqlite call profiling, this allows us to see the sqlite calls that are being made as the system runs, via the pseudo log. It was noted that by this profiling that a small change to pseudo.c, when a file was found, reduced the sqlite SELECT calls by about 1/3. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-16Restructure wrapfuncs.cMark Hatle6-234/+214
Restructure wrapfuncs.c in an attempt to improve PSEUDO_DISABLED=1 performance. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-13Further amend the system to enable/disable sudo during fork/exec.Mark Hatle17-313/+539
2010-12-09: * (mhatle) Add doc/program_flow to attempt to explain startup/running * (mhatle) guts/* minor cleanup * (mhatle) Reorganize into a new constructor for libpseudo ONLY pseudo main() now manually calls the util init new / revised init for client, wrappers and utils * (mhatle) Add central "reinit" function * (mhatle) Add manul execv* functions * (mhatle) rename pseudo_populate_wrappers to pseudo_check_wrappers Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-132010-12-08:Mark Hatle8-123/+193
* (mhatle) Add guts/clone.c to cleanup the clone support * (mhatle) guts/clone.c only run setupenv and reinit when NOT PSEUDO_RELOADED * (mhatle) guts/execve.c whitespace fixe * (mhatle) guts/fork.c similar to guts/clone.c change * (mhatle) pseudo_client.c add reinit function * (mhatle) pseudo_client.c revise client reset, include code from pseudo_wrappers.c * (mhatle) pseudo_server.c move the pid writing to the parent * (mhatle) pseudo_wrappers.c clone cleanup and populate cleanup Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-07This is a merge of several commits from a tree which turned out toPeter Seebach17-77/+595
be out of sync in a very inconvenient way. Changes include: * Some whitespace fixes, also move the pseudo_variables definition into pseudo_util.c since it's not used anywhere else. * Further improvements in the fork() support: We now recognize both positive and negative forms of PSEUDO_DISABLED, so we can distinguish between "it was removed from the environment by env -i" (restore the old value) and "it was intentionally turned off" (the new value wins). * clone(2) support. This is a little primitive, and programs might still fail horribly due to clone's semantics, but at least it's there and passes easy test cases. Plus a big patch from Mark Hatle: Cleanup fork/clone and PSEUDO_DISABLED guts/fork.c: * cleanup function and make it more robust * be sure to call pseudo_setupenv prior to pseudo_client_reset to match exec behavior pseudo_wrappers.c: * fix mismatched type in execl_to_v call via typecast * Simplify fork call via single call to wrap_fork() * be sure to save pseudo_disabled * be sure to call pseudo_setupenv prior to pseudo_client_reset to match exec behavior tests: * Add a test of whether pseudo can be disabled/enabled on a fork. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
2010-12-02Major shift: Fix execl*(), allow enabling/disabling pseudo withPeter Seebach4-145/+0
an environment variable across fork(). This does a couple of things. One is, move the fork/vfork and execl* functions out of the standard wrapper environment. Having done that, the execl*() wrappers are rewritten so they can use real_execv*() when running in antimagic mode. This allows us to run pseudo entirely in antimagic mode. Which is handy, because we also add support for enabling/disabling antimagic mode in the child process on a fork, using an additional hook for this in the pseudo_client_init() routine. The redone fork() wrapper now calls pseudo_client_init() in the child process after a successful fork even if it's in antimagic mode already. This is not yet well-tested.
2010-12-02The pseudo_db.c file created tables (operations, etc.) in the logsPeter Seebach2-74/+3
database to preserve the meaning of log messages in old databases in case of renumbering... but these tables were never used, and the tables used to create them were, in fact, out of date and inconsistent with the range of operations now supported. Remove the vestigial remains of the never-implemented feature. Also, update .gitignore to stop git from complaining about some more generated files.
2010-11-30Major shift: All the id_t types have been reworked so that theyPeter Seebach17-365/+377
are generated from text files and templates, making it now (we hope) impossible for the list of strings to get out of sync with the enum.
2010-11-18Messing with makewrappers: Move templating code out (for planned usePeter Seebach4-103/+105
in an incoming "maketables".)