198524Sfenner/*
298524Sfenner * Copyright (c) 2013 Damien Miller <djm@mindrot.org>
398524Sfenner *
498524Sfenner * Permission to use, copy, modify, and distribute this software for any
598524Sfenner * purpose with or without fee is hereby granted, provided that the above
698524Sfenner * copyright notice and this permission notice appear in all copies.
798524Sfenner *
898524Sfenner * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
998524Sfenner * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1098524Sfenner * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1198524Sfenner * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1298524Sfenner * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1398524Sfenner * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1498524Sfenner * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1598524Sfenner */
1698524Sfenner
1798524Sfenner/* $OpenBSD$ */
1898524Sfenner
1998524Sfenner#include "includes.h"
2098524Sfenner
2198524Sfenner#include <sys/types.h>
2298524Sfenner#ifdef HAVE_SYS_STATVFS_H
2398524Sfenner# include <sys/statvfs.h>
2498524Sfenner#endif
2598524Sfenner#include <stdlib.h>
2698524Sfenner#include <stdio.h>
2798524Sfenner#include <string.h>
2898524Sfenner#include <errno.h>
2998524Sfenner
3098524Sfennerstatic void
31127668Sbmsusage(void)
32190207Srpaulo{
3398524Sfenner	fprintf(stderr, "check-setuid [path]\n");
3498524Sfenner	exit(1);
3598524Sfenner}
3698524Sfenner
3798524Sfennerint
3898524Sfennermain(int argc, char **argv)
39127668Sbms{
4098524Sfenner	const char *path = ".";
4198524Sfenner	struct statvfs sb;
4298524Sfenner
4398524Sfenner	if (argc > 2)
4498524Sfenner		usage();
4598524Sfenner	else if (argc == 2)
4698524Sfenner		path = argv[1];
4798524Sfenner
4898524Sfenner	if (statvfs(path, &sb) != 0) {
4998524Sfenner		/* Don't return an error if the host doesn't support statvfs */
5098524Sfenner		if (errno == ENOSYS)
5198524Sfenner			return 0;
5298524Sfenner		fprintf(stderr, "statvfs for \"%s\" failed: %s\n",
5398524Sfenner		     path, strerror(errno));
5498524Sfenner	}
5598524Sfenner	return (sb.f_flag & ST_NOSUID) ? 1 : 0;
5698524Sfenner}
5798524Sfenner
5898524Sfenner
5998524Sfenner