RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   07-Oct-2009 02:50:25
  Branch: HEAD                             Handle: 2009100700502401

  Modified files:
    rpm/rpmdb               db3.c rpmdb.c

  Log:
    - dbi: sanitize DB_THREAD for non-root lusers.

  Summary:
    Revision    Changes     Path
    1.118       +30 -18     rpm/rpmdb/db3.c
    1.324       +0  -2      rpm/rpmdb/rpmdb.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/db3.c
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 db3.c
  --- rpm/rpmdb/db3.c   6 Oct 2009 23:04:13 -0000       1.117
  +++ rpm/rpmdb/db3.c   7 Oct 2009 00:50:24 -0000       1.118
  @@ -1005,10 +1005,10 @@
       int _printit;
       int rc;
   
  -    assert(db != NULL);
  +assert(db != NULL);
       if (dbcursor == NULL) {
        /* XXX duplicates require cursors. */
  -     rc = db->get(db, _txnid, key, data, 0);
  +     rc = db->get(db, _txnid, key, data, flags);
        /* XXX DB_NOTFOUND can be returned */
        _printit = (rc == DB_NOTFOUND ? 0 : _debug);
        rc = cvtdberr(dbi, "db->get", rc, _printit);
  @@ -1042,25 +1042,32 @@
        /*...@modifies *dbcursor, *key, *data, fileSystem @*/
   {
       DB * db = dbi->dbi_db;
  +    DB_TXN * _txnid = dbiTxnid(dbi);
       int _printit;
       int rc;
   
  -    assert(db != NULL);
  -    assert(dbcursor != NULL);
  -
  +assert(db != NULL);
  +    if (dbcursor == NULL) {
  +     /* XXX duplicates require cursors. */
  +     rc = db->pget(db, _txnid, key, pkey, data, flags);
  +     /* XXX DB_NOTFOUND can be returned */
  +     _printit = (rc == DB_NOTFOUND ? 0 : _debug);
  +     rc = cvtdberr(dbi, "db->pget", rc, _printit);
  +    } else {
   #if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 6)
  -    /* XXX db3 does DB_FIRST on uninitialized cursor */
  -    rc = dbcursor->pget(dbcursor, key, pkey, data, flags);
  -    /* XXX DB_NOTFOUND can be returned */
  -    _printit = (rc == DB_NOTFOUND ? 0 : _debug);
  -    rc = cvtdberr(dbi, "dbcursor->pget", rc, _printit);
  +     /* XXX db3 does DB_FIRST on uninitialized cursor */
  +     rc = dbcursor->pget(dbcursor, key, pkey, data, flags);
  +     /* XXX DB_NOTFOUND can be returned */
  +     _printit = (rc == DB_NOTFOUND ? 0 : _debug);
  +     rc = cvtdberr(dbi, "dbcursor->pget", rc, _printit);
   #else
  -    /* XXX db3 does DB_FIRST on uninitialized cursor */
  -    rc = dbcursor->c_pget(dbcursor, key, pkey, data, flags);
  -    /* XXX DB_NOTFOUND can be returned */
  -    _printit = (rc == DB_NOTFOUND ? 0 : _debug);
  -    rc = cvtdberr(dbi, "dbcursor->c_pget", rc, _printit);
  +     /* XXX db3 does DB_FIRST on uninitialized cursor */
  +     rc = dbcursor->c_pget(dbcursor, key, pkey, data, flags);
  +     /* XXX DB_NOTFOUND can be returned */
  +     _printit = (rc == DB_NOTFOUND ? 0 : _debug);
  +     rc = cvtdberr(dbi, "dbcursor->c_pget", rc, _printit);
   #endif
  +    }
   
   DBIDEBUG(dbi, (stderr, "<-- %s(%p,%p,%p,%p,%p,0x%x) rc %d %s%s\n", 
__FUNCTION__, dbi, dbcursor, key, pkey, data, flags, rc, _DBCFLAGS(flags), 
_KEYDATA(key, data, NULL)));
       return rc;
  @@ -1077,7 +1084,7 @@
       DB_TXN * _txnid = dbiTxnid(dbi);
       int rc;
   
  -    assert(db != NULL);
  +assert(db != NULL);
       if (dbcursor == NULL) {
        rc = db->del(db, _txnid, key, flags);
        rc = cvtdberr(dbi, "db->del", rc, _debug);
  @@ -1898,6 +1905,7 @@
   
            /* dbhome is unwritable, don't attempt DB_CREATE on DB->open ... */
            oflags &= ~DB_CREATE;
  +         oflags &= ~DB_AUTO_COMMIT;
   
            /* ... but DBENV->open might still need DB_CREATE ... */
            if (dbi->dbi_eflags & DB_PRIVATE) {
  @@ -1905,7 +1913,9 @@
            } else {
                dbi->dbi_eflags |= DB_JOINENV;
                dbi->dbi_oeflags &= ~DB_CREATE;
  +#ifdef       DYING
                dbi->dbi_oeflags &= ~DB_THREAD;
  +#endif
                /* ... but, unless DB_PRIVATE is used, skip DBENV. */
                dbi->dbi_use_dbenv = 0;
            }
  @@ -1949,7 +1959,9 @@
                } else {
                    dbi->dbi_eflags |= DB_JOINENV;
                    dbi->dbi_oeflags &= ~DB_CREATE;
  +#ifdef       DYING
                    dbi->dbi_oeflags &= ~DB_THREAD;
  +#endif
                }
            }
            dbf = _free(dbf);
  @@ -2107,7 +2119,7 @@
   /* 4.1: db->set_errcall(dbenv, rpmdb->db_errcall); */
   /* 4.1: db->set_errfile(dbenv, rpmdb->db_errfile); */
   /* 4.1: db->set_errpfx(dbenv, rpmdb->db_errpfx); */
  - /* 4.1: db->set_feedback(???) */
  +/* 4.1: db->set_feedback(???) */
   
            if (rc == 0 && dbi->dbi_lorder) {
                rc = db->set_lorder(db, dbi->dbi_lorder);
  @@ -2183,8 +2195,8 @@
   #endif
                    break;
                case DB_RECNO:
  -                 if (dbi->dbi_re_delim) {
   /* 4.1: db->set_append_recno(???) */
  +                 if (dbi->dbi_re_delim) {
                        rc = db->set_re_delim(db, dbi->dbi_re_delim);
                        rc = cvtdberr(dbi, "db->set_re_selim", rc, _debug);
                        if (rc) break;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.323 -r1.324 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 6 Oct 2009 23:04:13 -0000       1.323
  +++ rpm/rpmdb/rpmdb.c 7 Oct 2009 00:50:25 -0000       1.324
  @@ -3419,8 +3419,6 @@
   
       if (!db->db_rebuilding) {
        int64_t seqno = 0;
  -     int i;
  -
        dbi = dbiOpen(db, RPMDBI_SEQNO, 0);
        xx = dbiSeqno(dbi, &seqno, 0);
        xx = dbiSync(dbi, 0);
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to