[svn-inject] Applying Debian modifications to trunk
[manu/suphp.git] / src / filesystem.c
1 /*
2     suPHP - (c)2002-2004 Sebastian Marsching <sebastian@marsching.com>
3     
4     This file is part of suPHP.
5
6     suPHP 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; either version 2 of the License, or
9     (at your option) any later version.
10
11     suPHP 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 suPHP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21
22 #include <pwd.h>
23 #include <sys/types.h>
24 #include <unistd.h>
25 #include <fcntl.h>
26 #include <sys/stat.h>
27 #include <stdlib.h>
28
29 #include "suphp.h"
30
31 int file_exists(char *filename)
32 {
33  int filehandler;
34  if ((filehandler=open(filename, O_RDONLY))==-1)
35   return 0;
36  close(filehandler);
37  return 1;
38 }
39
40 int file_is_symbollink(char *filename)
41 {
42  struct stat *fileinfo;
43  int is_symbollink;
44
45  fileinfo = (struct stat*) malloc(sizeof(struct stat));
46  if (lstat(filename, fileinfo))
47  {
48   suphp_log_error("Could not lstat() %s", filename);
49   error_sysmsg_exit(ERRCODE_UNKNOWN, "lstat() failed", __FILE__, __LINE__);
50  }
51  if (fileinfo->st_mode & S_IFLNK)
52   is_symbollink = 1;
53  else
54   is_symbollink = 0;
55  free(fileinfo);
56  fileinfo = NULL;
57  return is_symbollink;
58 }
59
60 uid_t file_get_uid(char *filename)
61 {
62  struct stat *fileinfo;
63  uid_t uid;
64
65  fileinfo = (struct stat*) malloc(sizeof(struct stat));
66  if (stat(filename, fileinfo))
67  {
68   suphp_log_error("Could not stat() %s", filename);
69   error_sysmsg_exit(ERRCODE_UNKNOWN, "stat() failed", __FILE__, __LINE__);
70  }
71  uid = fileinfo->st_uid;
72  free(fileinfo);
73  fileinfo = NULL;
74  return uid;
75 }
76
77 gid_t file_get_gid(char *filename)
78 {
79  struct stat *fileinfo;
80  gid_t gid;
81
82  fileinfo = (struct stat*) malloc(sizeof(struct stat));
83  if (stat(filename, fileinfo))
84  {
85   suphp_log_error("Could not stat() %s", filename);
86   error_sysmsg_exit(ERRCODE_UNKNOWN, "stat() failed", __FILE__, __LINE__);
87  }
88  gid = fileinfo->st_gid;
89  free(fileinfo);
90  fileinfo = NULL;
91  return gid;
92 }
93
94 uid_t file_get_uid_l(char *filename)
95 {
96  struct stat *fileinfo;
97  uid_t uid;
98
99  fileinfo = (struct stat*) malloc(sizeof(struct stat));
100  if (lstat(filename, fileinfo))
101  {
102   suphp_log_error("Could not lstat() %s", filename);
103   error_sysmsg_exit(ERRCODE_UNKNOWN, "lstat() failed", __FILE__, __LINE__);
104  }
105  uid = fileinfo->st_uid;
106  free(fileinfo);
107  fileinfo = NULL;
108  return uid;
109 }
110
111 gid_t file_get_gid_l(char *filename)
112 {
113  struct stat *fileinfo;
114  gid_t gid;
115
116  fileinfo = (struct stat*) malloc(sizeof(struct stat));
117  if (lstat(filename, fileinfo))
118  {
119   suphp_log_error("Could not lstat() %s", filename);
120   error_sysmsg_exit(ERRCODE_UNKNOWN, "lstat() failed", __FILE__, __LINE__);
121  }
122  gid = fileinfo->st_gid;
123  free(fileinfo);
124  fileinfo = NULL;
125  return gid;
126 }