This file is indexed.

/usr/include/rostlab/euid_egid_resource.h is in librostlab3-dev 1.0.20-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
    Copyright (C) 2011 Laszlo Kajan, Technical University of Munich, Germany

    This file is part of librostlab.

    librostlab is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ROSTLAB_EUID_EGID
#define ROSTLAB_EUID_EGID 1

#include <errno.h>
#include <sstream>
#include <stdexcept>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

#include "rostlab/rostlab_stdexcept.h"

namespace rostlab {

class euid_egid_resource
{
  private:
    uid_t         _olduid;
    gid_t         _oldgid;
    bool          _changeduid;
    bool          _changedgid;
    // this is a resource - disable copy contructor and copy assignment
                  euid_egid_resource( const euid_egid_resource& ){};
    euid_egid_resource&
                  operator=(const euid_egid_resource&){return *this;};

  public:
                  euid_egid_resource( uid_t __neweuid, gid_t __newegid ) : _changeduid(false), _changedgid(false)
    {
      _olduid = getuid();
      _oldgid = getgid();
      if( getegid() != __newegid )
      {
        if( setregid( getegid(), __newegid ) ){ std::ostringstream s; s << "failed to setregid " << getegid() << ":" << __newegid << " : " << strerror( errno ); throw runtime_error( s.str() ); }
        _changedgid = true;
      }
      if( geteuid() != __neweuid )
      {
        if( setreuid( geteuid(), __neweuid ) ){ std::ostringstream s; s << "failed to setreuid " << geteuid() << ":" << __neweuid << " : " << strerror( errno ); throw runtime_error( s.str() ); }
        _changeduid = true;
      }
    }

    virtual       ~euid_egid_resource()
    {
      if( _changeduid )
      {
        if( setreuid( geteuid(), getuid() ) ){ std::ostringstream s; s << "failed revert setreuid to " << geteuid() << ":" << getuid() << " : " << strerror( errno ); throw runtime_error( s.str() ); }
        if( setreuid( _olduid, -1 ) ){ std::ostringstream s; s << "failed revert setreuid to " << _olduid << ":-1" << " : " << strerror( errno ); throw runtime_error( s.str() ); }
      }
      if( _changedgid )
      {
        if( setregid( getegid(), getgid() ) ){ std::ostringstream s; s << "failed revert setregid to " << getegid() << ":" << getgid() << " : " << strerror( errno ); throw runtime_error( s.str() ); }
        if( setregid( _oldgid, -1 ) ){ std::ostringstream s; s << "failed revert setregid to " << _oldgid << ":-1" << " : " << strerror( errno ); throw runtime_error( s.str() ); }
      }
    }
};

};

#endif // ROSTLAB_EUID_EGID
// vim:et:ai:ts=2: