Drizzled Public API Documentation

user_detect.h
1 /* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3  *
4  * Copyright (C) 2011 Andrew Hutchings
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #pragma once
22 
23 #include <unistd.h>
24 #include <pwd.h>
25 #include <cstring>
26 
28 {
29  public:
30  const char* getUser() { return user.empty() ? "" : &user[0]; }
31 
32  UserDetect()
33  {
34  long pw_len= sysconf(_SC_GETPW_R_SIZE_MAX);
35  struct passwd pw_struct;
36  struct passwd* pw_tmp_struct;
37  char *pw_buffer= new char[pw_len];
38 
39  if (getpwuid_r(geteuid(), &pw_struct, pw_buffer, pw_len, &pw_tmp_struct) == 0)
40  user.assign(pw_struct.pw_name, pw_struct.pw_name + strlen(pw_struct.pw_name) + 1);
41 
42  delete[] pw_buffer;
43  }
44 
45  private:
46  std::vector<char> user;
47 };