rpm  5.4.10
Macros | Functions | Variables
psm.c File Reference

Package state machine to handle a package from a transaction set. More...

#include "system.h"
#include <rpmio_internal.h>
#include <rpmcb.h>
#include <rpmsx.h>
#include <rpmmacro.h>
#include <rpmurl.h>
#include <rpmaug.h>
#include <rpmficl.h>
#include <rpmjs.h>
#include <rpmlua.h>
#include <rpmperl.h>
#include <rpmpython.h>
#include <rpmruby.h>
#include <rpmsm.h>
#include <rpmsql.h>
#include <rpmsquirrel.h>
#include <rpmtcl.h>
#include <rpmtag.h>
#include <rpmtypes.h>
#include <pkgio.h>
#include <rpmdb.h>
#include <rpmtxn.h>
#include "signature.h"
#include <rpmlib.h>
#include "rpmfi.h"
#include "fsm.h"
#include "psm.h"
#include "rpmds.h"
#include "rpmte.h"
#include "rpmts.h"
#include "misc.h"
#include <rpmcli.h>
#include "debug.h"
Include dependency graph for psm.c:

Go to the source code of this file.

Macros

#define _MIRE_INTERNAL   /* XXX mireApply doesn't tell which pattern matched. */
 
#define _RPMDB_INTERNAL
 
#define _RPMFI_INTERNAL
 
#define _RPMSQ_INTERNAL
 
#define _RPMPSM_INTERNAL
 
#define F_ISSET(_psm, _FLAG)   ((_psm)->flags & (RPMPSM_FLAGS_##_FLAG))
 
#define F_SET(_psm, _FLAG)   (*((unsigned *)&(_psm)->flags) |= (RPMPSM_FLAGS_##_FLAG))
 
#define F_CLR(_psm, _FLAG)   (*((unsigned *)&(_psm)->flags) &= ~(RPMPSM_FLAGS_##_FLAG))
 
#define _RPMEVR_INTERNAL
 
#define _RPMDS_INTERNAL
 
#define _RPMTE_INTERNAL
 
#define _RPMTS_INTERNAL   /* XXX ts->notify */
 
#define PATT_ISDIR(patt, len)
 
#define _PSM_DEBUG   0
 

Functions

static rpmRC createDir (rpmts ts, rpmfi fi, const char **fn, const char *name)
 
rpmRC rpmInstallSourcePackage (rpmts ts, void *_fd, const char **specFilePtr, const char **cookie)
 Install source package. More...
 
static const char * tag2sln (rpmTag tag)
 Return scriptlet name from tag. More...
 
static rpmScriptID tag2slx (rpmTag tag)
 Return scriptlet id from tag. More...
 
static pid_t psmWait (rpmpsm psm)
 Wait for child process to be reaped. More...
 
static rpmRC runScript (rpmpsm psm, Header h, const char *sln, HE_t Phe, const char *script, int arg1, int arg2, ARGV_t matches)
 Run scriptlet with args. More...
 
static rpmRC runInstScript (rpmpsm psm)
 Retrieve and run scriptlet from header. More...
 
static rpmRC handleOneTrigger (const rpmpsm psm, Header sourceH, Header triggeredH, int arg2)
 Execute triggers. More...
 
static int rpmdbTriggerGlobs (rpmpsm psm)
 
static rpmRC runTriggersLoop (rpmpsm psm, rpmTag tagno, int arg2)
 Run a dependency set loop against rpmdb triggers. More...
 
static rpmRC runTriggers (rpmpsm psm)
 Run trigger scripts in the database that are fired by this header. More...
 
static rpmRC runImmedTriggers (rpmpsm psm)
 Run triggers from this header that are fired by headers in the database. More...
 
static rpmfi rpmtsiFi (const rpmtsi tsi)
 Return transaction element's file info. More...
 
static rpmRC handleOneScriptTrigger (const rpmpsm psm, rpmds sourceDs, Header triggeredH, int arg2)
 Execute triggers. More...
 
static rpmRC runScriptTriggersLoop (rpmpsm psm, rpmTag tagno, int arg2)
 Run a dependency set loop against rpmdb triggers. More...
 
static rpmRC runScriptTriggers (rpmpsm psm)
 Run trigger scripts in the database that are fired by this header. More...
 
static const char * pkgStageString (pkgStage a)
 
void rpmpsmSetAsync (rpmpsm psm, int async)
 
rpmRC rpmpsmScriptStage (rpmpsm psm, rpmTag scriptTag, rpmTag progTag)
 Run rpmpsmStage(PSM_SCRIPT) for scriptTag and progTag. More...
 
static void rpmpsmFini (void *_psm)
 
static rpmpsm rpmpsmGetPool (rpmioPool pool)
 
rpmpsm rpmpsmNew (rpmts ts, rpmte te, rpmfi fi)
 Create and load a package state machine. More...
 
static rpmuint32_t hLoadTID (Header h, rpmTag tag)
 Load a transaction id from a header. More...
 
static int hCopyTag (Header sh, Header th, rpmTag tag)
 Copy a tag from a source to a target header. More...
 
static int hSaveBlinks (Header h, const struct rpmChainLink_s *blink)
 Save backward link(s) of an upgrade chain into a header. More...
 
static int hSaveFlinks (Header h, const struct rpmChainLink_s *flink)
 Save forward link(s) of an upgrade chain into a header. More...
 
static int populateInstallHeader (const rpmts ts, const rpmte te, rpmfi fi)
 Add per-transaction data to an install header. More...
 
static int postPopulateInstallHeader (const rpmts ts, const rpmpsm psm, rpmfi fi)
 Add fi->states to an install header. More...
 
static int rpmpsmNext (rpmpsm psm, pkgStage nstage)
 
rpmRC rpmpsmStage (rpmpsm psm, pkgStage stage)
 Package state machine driver. More...
 

Variables

int _psm_debug = 0
 
int _psm_threads = 0
 
static const char * SCRIPT_PATH
 
static int ldconfig_done = 0
 
static const char * ldconfig_path = "/sbin/ldconfig"
 
static rpmTag _trigger_tag
 
rpmioPool _psmPool
 

Detailed Description

Package state machine to handle a package from a transaction set.

Definition in file psm.c.

Macro Definition Documentation

§ _MIRE_INTERNAL

#define _MIRE_INTERNAL   /* XXX mireApply doesn't tell which pattern matched. */

Definition at line 8 of file psm.c.

§ _PSM_DEBUG

#define _PSM_DEBUG   0

Definition at line 74 of file psm.c.

§ _RPMDB_INTERNAL

#define _RPMDB_INTERNAL

Definition at line 37 of file psm.c.

§ _RPMDS_INTERNAL

#define _RPMDS_INTERNAL

Definition at line 56 of file psm.c.

§ _RPMEVR_INTERNAL

#define _RPMEVR_INTERNAL

Definition at line 55 of file psm.c.

§ _RPMFI_INTERNAL

#define _RPMFI_INTERNAL

Definition at line 43 of file psm.c.

§ _RPMPSM_INTERNAL

#define _RPMPSM_INTERNAL

Definition at line 47 of file psm.c.

§ _RPMSQ_INTERNAL

#define _RPMSQ_INTERNAL

Definition at line 46 of file psm.c.

§ _RPMTE_INTERNAL

#define _RPMTE_INTERNAL

Definition at line 59 of file psm.c.

§ _RPMTS_INTERNAL

#define _RPMTS_INTERNAL   /* XXX ts->notify */

Definition at line 62 of file psm.c.

§ F_CLR

#define F_CLR (   _psm,
  _FLAG 
)    (*((unsigned *)&(_psm)->flags) &= ~(RPMPSM_FLAGS_##_FLAG))

Definition at line 52 of file psm.c.

Referenced by rpmpsmSetAsync(), and rpmpsmStage().

§ F_ISSET

#define F_ISSET (   _psm,
  _FLAG 
)    ((_psm)->flags & (RPMPSM_FLAGS_##_FLAG))

Definition at line 49 of file psm.c.

Referenced by rpmpsmStage(), rpmsqlI(), rpmsqlNew(), and runScript().

§ F_SET

#define F_SET (   _psm,
  _FLAG 
)    (*((unsigned *)&(_psm)->flags) |= (RPMPSM_FLAGS_##_FLAG))

Definition at line 50 of file psm.c.

Referenced by rpmpsmSetAsync(), and rpmpsmStage().

§ PATT_ISDIR

#define PATT_ISDIR (   patt,
  len 
)
Value:
((patt[0] == '/' && patt[len-1] == '/') || \
(patt[0] == '^' && patt[len-1] == '$' && patt[len-2] == '/'))

Definition at line 71 of file psm.c.

Referenced by handleOneTrigger(), runImmedTriggers(), runScriptTriggersLoop(), and runTriggersLoop().

Function Documentation

§ createDir()

static rpmRC createDir ( rpmts  ts,
rpmfi  fi,
const char **  fn,
const char *  name 
)
static

§ handleOneScriptTrigger()

static rpmRC handleOneScriptTrigger ( const rpmpsm  psm,
rpmds  sourceDs,
Header  triggeredH,
int  arg2 
)
static

§ handleOneTrigger()

static rpmRC handleOneTrigger ( const rpmpsm  psm,
Header  sourceH,
Header  triggeredH,
int  arg2 
)
static

§ hCopyTag()

static int hCopyTag ( Header  sh,
Header  th,
rpmTag  tag 
)
static

Copy a tag from a source to a target header.

Parameters
shsource header
thtarget header
tagtag to copy
Returns
0 always

Definition at line 2274 of file psm.c.

References _free(), alloca(), _HE_s::c, headerGet(), headerPut(), _HE_s::p, rpmDataType_u::ptr, and _HE_s::tag.

Referenced by rpmpsmStage().

§ hLoadTID()

static rpmuint32_t hLoadTID ( Header  h,
rpmTag  tag 
)
static

Load a transaction id from a header.

Parameters
hheader
tagtag to load
Returns
tag value (0 on failure)

Definition at line 2252 of file psm.c.

References _free(), alloca(), headerGet(), _HE_s::p, rpmDataType_u::ptr, _HE_s::tag, and rpmDataType_u::ui32p.

Referenced by rpmpsmStage().

§ hSaveBlinks()

static int hSaveBlinks ( Header  h,
const struct rpmChainLink_s *  blink 
)
static

Save backward link(s) of an upgrade chain into a header.

Parameters
hheader
*blinkbackward links
Returns
0 always

< End of chain marker.

Definition at line 2294 of file psm.c.

References alloca(), rpmDataType_u::argv, argvCount(), argvData(), _HE_s::c, headerPut(), _HE_s::p, RPM_STRING_ARRAY_TYPE, RPMTAG_BLINKHDRID, RPMTAG_BLINKNEVRA, RPMTAG_BLINKPKGID, RPMTE_CHAIN_END, _HE_s::t, and _HE_s::tag.

Referenced by populateInstallHeader().

§ hSaveFlinks()

static int hSaveFlinks ( Header  h,
const struct rpmChainLink_s *  flink 
)
static

Save forward link(s) of an upgrade chain into a header.

Parameters
hheader
*flinkforward links
Returns
0 always

Definition at line 2349 of file psm.c.

References alloca(), rpmDataType_u::argv, argvCount(), argvData(), _HE_s::c, headerPut(), _HE_s::p, RPM_STRING_ARRAY_TYPE, RPMTAG_FLINKHDRID, RPMTAG_FLINKNEVRA, RPMTAG_FLINKPKGID, RPMTE_CHAIN_END, _HE_s::t, and _HE_s::tag.

Referenced by rpmpsmStage().

§ pkgStageString()

static const char* pkgStageString ( pkgStage  a)
static

§ populateInstallHeader()

static int populateInstallHeader ( const rpmts  ts,
const rpmte  te,
rpmfi  fi 
)
static

§ postPopulateInstallHeader()

static int postPopulateInstallHeader ( const rpmts  ts,
const rpmpsm  psm,
rpmfi  fi 
)
static

Add fi->states to an install header.

Parameters
tstransaction set
tetransaction element
fifile info set
Returns
0 always

Definition at line 2531 of file psm.c.

References alloca(), _HE_s::c, headerPut(), _HE_s::p, RPM_UINT32_TYPE, RPM_UINT8_TYPE, rpmfiFC(), rpmpsmStage(), RPMSCRIPT_MAX, RPMTAG_FILESTATES, RPMTAG_SCRIPTMETRICS, RPMTAG_SCRIPTSTATES, _HE_s::t, _HE_s::tag, rpmDataType_u::ui32p, and rpmDataType_u::ui8p.

Referenced by rpmpsmStage().

§ psmWait()

static pid_t psmWait ( rpmpsm  psm)
static

§ rpmdbTriggerGlobs()

static int rpmdbTriggerGlobs ( rpmpsm  psm)
static

§ rpmInstallSourcePackage()

rpmRC rpmInstallSourcePackage ( rpmts  ts,
void *  _fd,
const char **  specFilePtr,
const char **  cookie 
)

Install source package.

Deprecated:
This routine needs to DIE! DIE! DIE!.
Todo:
Eliminate in rpm-5.1, insturment rpmtsRun() state machine instead.
Parameters
tstransaction set
_fdfile handle
Return values
specFilePtraddress of spec file name (or NULL)
cookieaddress of cookie pointer (or NULL)
Returns
rpmRC return code

Definition at line 210 of file psm.c.

References _, _free(), alloca(), rpmDataType_u::argv, createDir(), FA_CREATE, Fclose(), fdLink(), headerFree(), headerGet(), headerIsEntry(), headerLink(), headerMacrosLoad(), IOSM_MAP_GID, IOSM_MAP_MODE, IOSM_MAP_PATH, IOSM_MAP_UID, _HE_s::p, PSM_FINI, PSM_PKGINSTALL, PSM_PROCESS, rpmExpand(), rpmfiFFlags(), rpmfiFN(), rpmfiInit(), RPMFILE_SPECFILE, rpmfiNext(), rpmlog(), RPMLOG_ERR, rpmpsmFree(), rpmpsmNew(), rpmpsmStage(), RPMRC_FAIL, RPMRC_NOKEY, RPMRC_NOTTRUSTED, RPMRC_OK, rpmReadPackageFile(), RPMTAG_ARCH, RPMTAG_BASENAMES, RPMTAG_COOKIE, RPMTAG_FILEPATHS, RPMTAG_SOURCERPM, rpmteFI(), rpmteSetHeader(), rpmtsAddInstallElement(), rpmtsClean(), rpmtsElement(), rpmDataType_u::str, _HE_s::tag, and xstrdup().

Referenced by rpmInstallSource().

§ rpmpsmFini()

static void rpmpsmFini ( void *  _psm)
static

Definition at line 2175 of file psm.c.

References _free(), rpmdsFree(), rpmfiFree(), rpmteFree(), and rpmtsFree().

Referenced by rpmpsmGetPool().

§ rpmpsmGetPool()

static rpmpsm rpmpsmGetPool ( rpmioPool  pool)
static

Definition at line 2204 of file psm.c.

References _psm_debug, _psmPool, rpmioGetPool(), rpmioNewPool(), and rpmpsmFini().

Referenced by rpmpsmNew().

§ rpmpsmNew()

rpmpsm rpmpsmNew ( rpmts  ts,
rpmte  te,
rpmfi  fi 
)

Create and load a package state machine.

Parameters
tstransaction set
tetransaction set element
fifile info set
Returns
new package state machine

Definition at line 2220 of file psm.c.

References rpmfiLink(), rpmpsmGetPool(), rpmpsmLink(), rpmtsLink(), and xcalloc().

Referenced by _processFailedPackage(), rpmInstallSourcePackage(), rpmtsProcess(), rpmtsRepackage(), rpmtsRunScript(), rpmtsRunScriptTriggers(), and rpmVerifyScript().

§ rpmpsmNext()

static int rpmpsmNext ( rpmpsm  psm,
pkgStage  nstage 
)
static

Definition at line 2575 of file psm.c.

References _psm_threads, rpmpsmStage(), rpmsqJoin(), and rpmsqThread().

Referenced by rpmpsmStage().

§ rpmpsmScriptStage()

rpmRC rpmpsmScriptStage ( rpmpsm  psm,
rpmTag  scriptTag,
rpmTag  progTag 
)

Run rpmpsmStage(PSM_SCRIPT) for scriptTag and progTag.

Parameters
psmpackage state machine data
scriptTagscriptlet tag to execute
progTagscriptlet prog tag to execute
Returns
0 on success

Definition at line 2146 of file psm.c.

References PSM_POSTTRANS, PSM_PRETRANS, PSM_SCRIPT, rpmpsmStage(), RPMTAG_POSTTRANS, RPMTAG_PRETRANS, RPMTAG_SANITYCHECK, RPMTAG_TRIGGERPOSTTRANSIN, RPMTAG_TRIGGERPOSTTRANSUN, RPMTAG_TRIGGERPRETRANSIN, RPMTAG_TRIGGERPRETRANSUN, and RPMTAG_VERIFYSCRIPT.

Referenced by rpmtsRunScript(), rpmtsRunScriptTriggers(), and rpmVerifyScript().

§ rpmpsmSetAsync()

void rpmpsmSetAsync ( rpmpsm  psm,
int  async 
)

Definition at line 2133 of file psm.c.

References F_CLR, and F_SET.

Referenced by rpmtsProcess().

§ rpmpsmStage()

rpmRC rpmpsmStage ( rpmpsm  psm,
pkgStage  stage 
)

Package state machine driver.

Todo:
Packages w/o files never get a callback, hence don't get displayed on install with -v.

Definition at line 2592 of file psm.c.

References _, _free(), alloca(), rpmDataType_u::argv, _HE_s::c, Chdir(), Chroot(), D_, dbiOpen(), errno, F_CLR, F_ISSET, F_SET, FA_COPYOUT, Fclose(), fdDup(), Fdopen(), FDSTAT_DIGEST, fdstat_op(), FDSTAT_READ, FDSTAT_WRITE, Ferror(), Fflush(), Fileno(), Fopen(), fsmSetup(), fsmTeardown(), Fstrerror(), hCopyTag(), headerCopyLoad(), headerFini(), headerFree(), headerGet(), headerGetInstance(), headerInit(), headerIsEntry(), headerLink(), headerNew(), headerNext(), headerPut(), headerRegenSigHeader(), headerReload(), headerSetInstance(), headerSprintf(), hLoadTID(), hSaveFlinks(), IOSM_MAP_GID, IOSM_MAP_MODE, IOSM_MAP_PATH, IOSM_MAP_UID, IOSM_PKGBUILD, IOSM_PKGCOMMIT, IOSM_PKGERASE, IOSM_PKGINSTALL, IOSM_SBIT_CHECK, iosmStrerror(), _HE_s::p, pkgStageString(), populateInstallHeader(), postPopulateInstallHeader(), PSM_CHROOT_IN, PSM_CHROOT_OUT, PSM_COMMIT, PSM_CREATE, PSM_DESTROY, PSM_FINI, PSM_IMMED_TRIGGERS, PSM_INIT, PSM_NOTIFY, PSM_PKGCOMMIT, PSM_PKGERASE, PSM_PKGINSTALL, PSM_PKGSAVE, PSM_POST, PSM_POSTTRANS, PSM_PRE, PSM_PRETRANS, PSM_PROCESS, PSM_RPMDB_ADD, PSM_RPMDB_LOAD, PSM_RPMDB_REMOVE, PSM_RPMIO_FLAGS, PSM_SCRIPT, PSM_TRIGGERS, PSM_UNDO, PSM_UNKNOWN, rpmDataType_u::ptr, RPM_BIN_TYPE, RPM_STRING_TYPE, RPM_UINT32_TYPE, RPMCALLBACK_CPIO_ERROR, RPMCALLBACK_INST_PROGRESS, RPMCALLBACK_INST_START, RPMCALLBACK_UNINST_START, RPMCALLBACK_UNINST_STOP, RPMCALLBACK_UNPACK_ERROR, rpmdbAdd(), rpmdbCountPackages(), RPMDBI_PACKAGES, rpmdbRemove(), rpmdsNew(), rpmExpand(), rpmfiFC(), RPMFILE_STATE_NORMAL, rpmGenPath(), rpmGetPath(), rpmHeaderFormats, rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, RPMLOG_INFO, rpmmiAddPattern(), rpmmiFree(), rpmmiInstance(), rpmmiNext(), RPMMIRE_STRCMP, rpmMkdirPath(), rpmpkgSizeof(), rpmpkgWrite(), rpmpsmNext(), RPMRC_FAIL, RPMRC_OK, rpmswAdd(), rpmswEnter(), rpmswExit(), RPMTAG_ARCH, RPMTAG_ARCHIVESIZE, RPMTAG_BLINKHDRID, RPMTAG_BLINKNEVRA, RPMTAG_BLINKPKGID, RPMTAG_DEFAULTPREFIX, RPMTAG_DISTEPOCH, RPMTAG_EPOCH, RPMTAG_FILEGROUPNAME, RPMTAG_FILEPATHS, RPMTAG_FILEUSERNAME, RPMTAG_HEADERIMAGE, RPMTAG_HEADERIMMUTABLE, RPMTAG_HEADERSIGNATURES, RPMTAG_INSTALLTID, RPMTAG_NAME, RPMTAG_ORIGBASENAMES, RPMTAG_ORIGPATHS, RPMTAG_OS, RPMTAG_PACKAGEDIGEST, RPMTAG_PACKAGEORIGIN, RPMTAG_PACKAGESTAT, RPMTAG_PAYLOADCOMPRESSOR, RPMTAG_PAYLOADFORMAT, RPMTAG_POSTIN, RPMTAG_POSTINPROG, RPMTAG_POSTTRANS, RPMTAG_POSTTRANSPROG, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, RPMTAG_PREIN, RPMTAG_PREINPROG, RPMTAG_PRETRANS, RPMTAG_PRETRANSPROG, RPMTAG_PREUN, RPMTAG_PREUNPROG, RPMTAG_RELEASE, RPMTAG_REMOVETID, RPMTAG_SHA1HEADER, RPMTAG_TRIGGERNAME, RPMTAG_VERSION, rpmTagTable, rpmteA(), rpmteD(), rpmteE(), rpmteFd(), rpmteHdrid(), rpmteN(), rpmteNEVR(), rpmteO(), rpmteR(), rpmteSetDBInstance(), rpmteSetHeader(), rpmteV(), RPMTRANS_FLAG_APPLYONLY, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_NOPOST, RPMTRANS_FLAG_NOPOSTUN, RPMTRANS_FLAG_NOPRE, RPMTRANS_FLAG_NOPREUN, RPMTRANS_FLAG_NORPMDB, RPMTRANS_FLAG_NOTRIGGERIN, RPMTRANS_FLAG_NOTRIGGERPOSTUN, RPMTRANS_FLAG_NOTRIGGERPREIN, RPMTRANS_FLAG_NOTRIGGERUN, RPMTRANS_FLAG_PKGCOMMIT, RPMTRANS_FLAG_TEST, RPMTRANS_TYPE_AUTOROLLBACK, RPMTRANS_TYPE_ROLLBACK, RPMTS_OP_COMPRESS, RPMTS_OP_DBADD, RPMTS_OP_DBREMOVE, RPMTS_OP_DIGEST, RPMTS_OP_UNCOMPRESS, rpmtsChrootDone(), rpmtsColor(), rpmtsCurrDir(), rpmtsFlags(), rpmtsGetRdb(), rpmtsGetTid(), rpmtsInitIterator(), rpmtsNotify(), rpmtsOp(), rpmtsRootDir(), rpmtsSetChrootDone(), rpmtsType(), rpmtsVSFlags(), RPMVSF_NOHDRCHK, runImmedTriggers(), runInstScript(), runScriptTriggers(), runTriggers(), snprintf(), stpcpy(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tag2sln(), rpmDataType_u::ui32p, urlPath(), xmalloc, and xstrdup().

Referenced by _processFailedPackage(), postPopulateInstallHeader(), rpmInstallSourcePackage(), rpmpsmNext(), rpmpsmScriptStage(), rpmtsProcess(), and rpmtsRepackage().

§ rpmtsiFi()

static rpmfi rpmtsiFi ( const rpmtsi  tsi)
static

Return transaction element's file info.

Todo:
Take a rpmfi refcount here.
Parameters
tsitransaction element iterator
Returns
transaction element file info

Definition at line 1737 of file psm.c.

References rpmtsElement().

Referenced by runScriptTriggersLoop().

§ runImmedTriggers()

static rpmRC runImmedTriggers ( rpmpsm  psm)
static

§ runInstScript()

static rpmRC runInstScript ( rpmpsm  psm)
static

Retrieve and run scriptlet from header.

Parameters
psmpackage state machine data
Returns
rpmRC return code

Definition at line 1193 of file psm.c.

References _free(), alloca(), rpmDataType_u::argv, headerGet(), _HE_s::p, rpmDataType_u::ptr, RPM_STRING_TYPE, rpmExpand(), RPMRC_OK, runScript(), stpcpy(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tag2sln(), and xmalloc.

Referenced by rpmpsmStage().

§ runScript()

static rpmRC runScript ( rpmpsm  psm,
Header  h,
const char *  sln,
HE_t  Phe,
const char *  script,
int  arg1,
int  arg2,
ARGV_t  matches 
)
static

Run scriptlet with args.

Run a script with an interpreter. If the interpreter is not specified, /bin/sh will be used.

Parameters
psmpackage state machine data
hheader
slnname of scriptlet section
Phescriptlet args, Phe->p.argv[0] is interpreter to use
scriptscriptlet body
arg1no. instances of package installed after scriptlet exec (-1 is no arg)
arg2ditto, but for the target package
Returns
RPMRC_OK on success

Definition at line 796 of file psm.c.

References _, _free(), alloca(), rpmDataType_u::argv, argvCount(), argvData(), _HE_s::c, Chdir(), Chroot(), D_, doputenv(), errno, F_ISSET, Fclose(), fdDup(), Ferror(), Fileno(), Fopen(), Fwrite(), headerGet(), IP, _HE_s::p, psmWait(), rpmDataType_u::ptr, RPM_STRING_ARRAY_TYPE, RPMCALLBACK_SCRIPT_ERROR, RPMCALLBACK_SCRIPT_START, RPMCALLBACK_SCRIPT_STOP, rpmExpand(), rpmIsDebug, rpmIsVerbose, rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMSCRIPT_MAX, RPMSCRIPT_STATE_EXEC, RPMSCRIPT_STATE_SELINUX, RPMSCRIPT_STATE_UNKNOWN, rpmsqFork(), rpmswEnter(), rpmswExit(), rpmsxExec(), RPMTAG_INSTALLPREFIX, RPMTAG_INSTPREFIXES, RPMTAG_NVRA, RPMTAG_POSTIN, RPMTAG_POSTUN, RPMTAG_PREIN, RPMTAG_PREUN, rpmTempFile(), rpmtsChrootDone(), rpmtsGetRdb(), rpmtsNotify(), rpmtsRootDir(), rpmtsScriptFd(), rpmtsSELinuxEnabled(), SCRIPT_PATH, stpcpy(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tag2sln(), tag2slx(), Unlink(), unsetenv(), rpmop_s::usecs, and xmalloc.

Referenced by handleOneScriptTrigger(), handleOneTrigger(), and runInstScript().

§ runScriptTriggers()

static rpmRC runScriptTriggers ( rpmpsm  psm)
static

Run trigger scripts in the database that are fired by this header.

Parameters
psmpackage state machine data
Returns
0 on success

Definition at line 2043 of file psm.c.

References _free(), _trigger_tag, argvFree(), mireFreeAll(), rpmdbTriggerGlobs(), rpmExpand(), RPMRC_OK, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, RPMTAG_NAME, RPMTAG_PROVIDENAME, and runScriptTriggersLoop().

Referenced by rpmpsmStage().

§ runScriptTriggersLoop()

static rpmRC runScriptTriggersLoop ( rpmpsm  psm,
rpmTag  tagno,
int  arg2 
)
static

§ runTriggers()

static rpmRC runTriggers ( rpmpsm  psm)
static

Run trigger scripts in the database that are fired by this header.

Parameters
psmpackage state machine data
Returns
0 on success

Definition at line 1541 of file psm.c.

References _free(), _trigger_tag, argvFree(), mireFreeAll(), rpmdbCountPackages(), rpmdbTriggerGlobs(), rpmExpand(), RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, RPMTAG_NAME, RPMTAG_PROVIDENAME, rpmteN(), rpmtsGetRdb(), and runTriggersLoop().

Referenced by rpmpsmStage().

§ runTriggersLoop()

static rpmRC runTriggersLoop ( rpmpsm  psm,
rpmTag  tagno,
int  arg2 
)
static

Run a dependency set loop against rpmdb triggers.

Parameters
psmpackage state machine data
tagnodependency set to run against rpmdb
arg2scriptlet arg2
Returns
RPMRC_OK on success

Definition at line 1446 of file psm.c.

References _free(), argiAdd(), argiCount(), argiData(), argiFree(), argiSort(), handleOneTrigger(), mireRegexec(), PATT_ISDIR, rpmdsFree(), rpmdsInit(), rpmdsN(), rpmdsNew(), rpmdsNext(), rpmmiFree(), rpmmiInstance(), rpmmiNext(), rpmmiPrune(), RPMRC_FAIL, RPMRC_OK, RPMTAG_DIRNAMES, RPMTAG_TRIGGERNAME, rpmtsInitIterator(), stpcpy(), xmalloc, and xstrdup().

Referenced by runTriggers().

§ tag2sln()

static const char* tag2sln ( rpmTag  tag)
static

§ tag2slx()

static rpmScriptID tag2slx ( rpmTag  tag)
static

Variable Documentation

§ _psm_debug

int _psm_debug = 0

Definition at line 76 of file psm.c.

Referenced by handleOneScriptTrigger(), rpmpsmGetPool(), and runScriptTriggersLoop().

§ _psm_threads

int _psm_threads = 0

Definition at line 78 of file psm.c.

Referenced by rpmpsmNext().

§ _psmPool

rpmioPool _psmPool

Definition at line 2202 of file psm.c.

Referenced by rpmpsmGetPool().

§ _trigger_tag

rpmTag _trigger_tag
static

Definition at line 1239 of file psm.c.

Referenced by runImmedTriggers(), runScriptTriggers(), and runTriggers().

§ ldconfig_done

int ldconfig_done = 0
static

Definition at line 775 of file psm.c.

§ ldconfig_path

const char* ldconfig_path = "/sbin/ldconfig"
static

Definition at line 778 of file psm.c.

§ SCRIPT_PATH

const char* SCRIPT_PATH
static
Initial value:
=
"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin"

Definition at line 380 of file psm.c.

Referenced by runScript().