Using stat() to determine file permissions


 
Thread Tools Search this Thread
Top Forums Programming Using stat() to determine file permissions
# 1  
Old 10-02-2003
Using stat() to determine file permissions

I'm having a problem verifying a directory's permissions using the stat() command. I want to flag an error condition if the directory is WRITABLE by either group or other. This is the code I'm using:

if (stat(dirname,&statbuf) == -1) {
fprintf(stderr,"Unable to run stat() command\n");
exit(1);
}

if ((statbuf.st_mode & S_IWGRP == S_IWGRP) || (statbuf.st_mode & S_IWOTH = S_IWOTH)) {
fprintf(stderr, "Directory % should only be writable by the owner\n", dirname);
exit(1);
}

This code is behaving quite strangely for me. The error line is getting printed when the directory is EXECUTABLE by group or other. I've looked in stat.h and I'm using the correct #define macros. Can anybody spot anything wrong with this ?
# 2  
Old 10-02-2003
I can't believe you even got that to compile. statbuf.st_mode & S_IWOTH is not an l-value. Please tell me that the = in the if statement is really an == which would at least be legal.

Look at your subexpression:
(statbuf.st_mode & S_IWGRP == S_IWGRP)

First you are asking the compiler if S_IWGRP is equal to S_IWGRP. It is, so that becomes a 1. Next you are doing a bitwise "and" of 1 and statbuf.st_mode. So the whole subexpression is asking if the last bit of statbuf.st_mode is on.

You need to use:
((statbuf.st_mode & S_IWGRP) == S_IWGRP)
to get the effect that you want.
# 3  
Old 10-02-2003
Quote:
Originally posted by Perderabo
I can't believe you even got that to compile. statbuf.st_mode & S_IWOTH is not an l-value. Please tell me that the = in the if statement is really an == which would at least be legal.

Look at your subexpression:
(statbuf.st_mode & S_IWGRP == S_IWGRP)

First you are asking the compiler if S_IWGRP is equal to S_IWGRP. It is, so that becomes a 1. Next you are doing a bitwise "and" of 1 and statbuf.st_mode. So the whole subexpression is asking if the last bit of statbuf.st_mode is on.

You need to use:
((statbuf.st_mode & S_IWGRP) == S_IWGRP)
to get the effect that you want.
Thanks. I knew it was something stupid. I hardly ever use the bitwise operators so that's why I was confused. It makes sense now too because the execute bit was the one that was causing the expression to be TRUE. That is the last bit in that entire bit mask. Thanks again.
# 4  
Old 10-02-2003
Quote:
Please tell me that the = in the if statement is really an == which would at least be legal.
Yes, it was "==". That was a typo.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

On Solaris, without stat, how to check how old a file is?

Hi, How do I check how old a file is? That is, is it 1 day old, 1 year old, generated x hours ago? Currently, I receive a supposed to be daily report and in the last few times, it has not been recent, that is instead of the one generated for the day, it is one that was created yesterday or... (3 Replies)
Discussion started by: newbie_01
3 Replies

2. Solaris

/bin/find: stat() error <File> : No such file or directory

Hi, I am getting below error in Solaris 10 SPARC when trying to issue a search on /var/tmp partition Below is the query /bin/find /var/tmp/ -type f -atime +1 Below is the result /bin/find: stat() error <File> : No such file or directory (28 Replies)
Discussion started by: prash358
28 Replies

3. Shell Programming and Scripting

Cp: cannot stat No such file or directory

Hi Please review this script and let me know what i need to do. This is my script #!/bin/bash #SCRIPT: forms.sh #PURPOSE: Process a file line by line with redirected while-read loop. #PURPOSE: and copy the forms to the follder foldername=sample_dir mkdir -p $foldername while read... (5 Replies)
Discussion started by: Rami Reddy
5 Replies

4. UNIX for Dummies Questions & Answers

Cp: cannot stat...: no such file or directory

Please review the issue below and tell me what I need to do. I cannot copy the zip file. $ ls -l total 10 drwxrwx--- 1 root vboxsf 0 Feb 1 16:10 sf_Temp drwxrwx--- 2 root vboxsf 4096 Jan 31 17:59 sf_VBoxShared dr-xr-xr-x 6 oracle root 2048 Dec 19 09:20 VBOXADDITIONS_4.2.6_82870 $ cp -r... (2 Replies)
Discussion started by: lutus
2 Replies

5. Shell Programming and Scripting

Mv : cannot stat :no such file or directory

this is my script x=1 o=0 while do fi ];then (this check is a certain extension with a number exist) let x++ else mv /var/log/mrnet.log.1.gz /var/log/mrnet.log.$x.gz o=1 fi done mrnet.log.1.gz exist already... (1 Reply)
Discussion started by: Froob
1 Replies

6. Shell Programming and Scripting

using File::stat

Hello everyone, I need some help on a perl script. The script is to open a dir and print out the date of last modification on all files. I'm been trying this code but it doesn't work. use File::stat; open (D,"$ARGV") or die "Can't open\n"; while (defined ($file = readdir D)) { next... (3 Replies)
Discussion started by: new bie
3 Replies

7. SuSE

cp: cannot stat no such file or directory

#!/bin/ksh cp /etc/apache2/vhosts.d/orginal/test-yast2_vhost.conf-bk /etc/apache2/vhosts.d/test-yast2_vhost.conf /usr/sbin/rcapache2 graceful when i ran this script I'm getting following error. cp: cannot stat /etc/apache2/vhosts.d/orginal/test-yast2_vhost.conf-bk no such file or directory... (1 Reply)
Discussion started by: s_linux
1 Replies

8. Shell Programming and Scripting

cp: cannot stat: No such file or directory

Hi there, I need some help with cp files from one directory into several others. The code is as follows: SUB=`ls src_directory | wc -l` OUT_LOOP=$(($SUB / $MK_NUMS)) IN_LOOP=$(($SUB % $MK_NUMS)) COUNT=$MK_NUMS while ] do mkdir dst_directory$COUNT ls -1 src_directory |... (4 Replies)
Discussion started by: Krush187
4 Replies

9. Shell Programming and Scripting

Using 'stat' to determine file system type (with Zenity)

edited and removed (0 Replies)
Discussion started by: mdpalow
0 Replies

10. Shell Programming and Scripting

determine owner directory permissions from within the directory

From within a directory, how do I determine whether I have write permission for it. test -w pwd ; echo ? This doesn't work as it returns false, even though I have write permission. (4 Replies)
Discussion started by: Sniper Pixie
4 Replies
Login or Register to Ask a Question