Author Archives: Bora M. Alper

Dropping root Privileges Permanently on Linux in C

If you would like to drop root privileges permanently on Linux using C:

#define _GNU_SOURCE  // for secure_getenv()


int drop_root_privileges(void) {  // returns 0 on success and -1 on failure
	gid_t gid;
	uid_t uid;

	// no need to "drop" the privileges that you don't have in the first place!
	if (getuid() != 0) {
		return 0;
	}

	// when your program is invoked with sudo, getuid() will return 0 and you
	// won't be able to drop your privileges
	if ((uid = getuid()) == 0) {
		const char *sudo_uid = secure_getenv("SUDO_UID");
		if (sudo_uid == NULL) {
			printf("environment variable `SUDO_UID` not found\n");
			return -1;
		}
		errno = 0;
		uid = (uid_t) strtoll(sudo_uid, NULL, 10);
		if (errno != 0) {
			perror("under-/over-flow in converting `SUDO_UID` to integer");
			return -1;
		}
	}

	// again, in case your program is invoked using sudo
	if ((gid = getgid()) == 0) {
		const char *sudo_gid = secure_getenv("SUDO_GID");
		if (sudo_gid == NULL) {
			printf("environment variable `SUDO_GID` not found\n");
			return -1;
		}
		errno = 0;
		gid = (gid_t) strtoll(sudo_gid, NULL, 10);
		if (errno != 0) {
			perror("under-/over-flow in converting `SUDO_GID` to integer");
			return -1;
		}
	}
	
	if (setgid(gid) != 0) {
		perror("setgid");
		return -1;
	}
	if (setuid(uid) != 0) {
		perror("setgid");
		return -1;	
	}

	// change your directory to somewhere else, just in case if you are in a
	// root-owned one (e.g. /root)
	if (chdir("/") != 0) {
		perror("chdir");
		return -1;
	}

	// check if we successfully dropped the root privileges
	if (setuid(0) == 0 || seteuid(0) == 0) {
		printf("could not drop root privileges!\n");
		return -1;
	}

	return 0;
}

I hope this would save you some time so that you won’t spend an hour like me, trying to find a proper solution!

The code is provided “as is”, without warranty of any kind, express or implied.

Sources

c – Dropping root privileges – Stack Overflow

man sudo (Sudo Manual)

Closed-Form Expression to Calculate n-th Fibonacci Number

A more interesting way to find nth Fibonacci number.

Fibonacci sequence is a prime example in teaching recursion to newcomers, and a great opportunity to brag if your language supports Tail Call Optimization, but it often goes unnoticed that there is a closed-form expression which lets us find the nth Fibonacci number with great ease and in much faster way. This article will present the expression, and explain -step by step- its derivation using high-school mathematics.

Continue reading

Commandments for University/College Applicants

After messing up my university applications, I have decided to create a list for fellow UWC Dilijan students to get rid of the glooming feeling of regret, but I guess the list might be equally useful for other UWCers, as well as IB students and others who are planning to study abroad.

Continue reading

The featured caricature of the article in The Economist

Western Media Bias: Analysis of an Article in The Economist

I have happened to buy “The Economist” for my two-days-long layover in İstanbul to kill some spare time, and read an article titled The prince’s time machine, which is about the “shift from the Islamic to the Gregorian calendar” in Saudi Arabia. The article was so full of bias that I couldn’t resist myself but to write a response.

Continue reading

Some Advice to Those Who Will Serve Time in a UWC

or Things I Wish I Had Known When I Started UWC Dilijan

It has been one and a half year since I have started studying in Dilijan and it has been only one semester that I can confidently say that I have been mentally and emotionally stable. There are many things that you realize in your third term when everything is kind of done and that makes you realize what have you done wrong in the past, or what you could have done better. Take this prose as a honest reflection and a sincere advice to those who will serve time in a UWC.

Continue reading

Let us not waste our time in idle discourse! (Pause. Vehemently.) Let us do something, while we have the chance! It is not every day that we are needed. Not indeed that we personally are needed. Others would meet the case equally well, if not better. To all mankind they were addressed, those cries for help still ringing in our ears! But at this place, at this moment of time, all mankind is us, whether we like it or not. Let us make the most of it, before it is too late! Let us represent worthily for once the foul brood to which a cruel fate consigned us! What do you say? (Estragon says nothing.) It is true that when with folded arms we weigh the pros and cons we are no less a credit to our species. The tiger bounds to the help of his congeners without the least reflection, or else he slinks away into the depths of the thickets. But that is not the question. What are we doing here, that is the question. And we are blessed in this, that we happen to know the answer. Yes, in this immense confusion one thing alone is clear. We are waiting for Godot to come—

Using LLVM’s IR for semi-compiled packages

As many other things that comes into my mind between 1-3 AM, this is also a bit blurry.

I was thinking about the possibility of utilizing LLVM’s Intermediate Representation to pre-compile packages into an intermediate language which is high level enough, and yet with its dense bitcode representation, can easily shorten compile times by reducing the time that is spent on parsing, analyzing and intermediate code generation.

Distros such as Gentoo can benefit from to a great extent I believe, but as I don’t know how their system works, I can not elaborate about the details. Also any open source project, that doesn’t provide pre-built packages, can at least use this method to shorten build times of their users.

I’ll think about it, to come up with an idea.

At the Dawn of Second Month in UWC Dilijan, Alaverdi

It’s hard to believe that I just spent my two months in a small town of Armenia, Dilijan. It was no different than a dream to study at UWC one year ago but today when I look back, I can see that how life-changing it was for me to come here and it just begun.

Tonight we arrived to our college back, from a three days two nights long journey to a small town near Georgian border, Alaverdi. It’s known by having the steepest cable car in the Soviet-era and the copper mine that supplied the high demands of the Union. There are also lots of old monasteries and churches but we only had chance to visit a few of them.

Continue reading