Category Archives: unix

Apache 403 — one cause on Mac (and other Unixes)

Things suddenly broke, without installing web-server-related stuff, without touching apache config?

It’s probably permissions.
No really, you checked out permissions, and it looks ok. Really, “Sites” (or “public_html”) looks ok. However, the entire path needs to be fixed.

Check if each directory in full path to the file you want to serve contains at least executable permission for the web group, or “other” group. That is, on Mac this helped me:

chmod o+x /Users
chmod o+x /Users/ivucica
chmod 755 /Users/ivucica/Sites

What went wrong for me? I suspect Mac OS X 10.6’s disk check, or perhaps one other disk utility I recently used, messed up the executable permission flag of /Users/ivucica. I have no other explanation.

This tip would probably help under GNU/Linux too.

Using Alpine on MacOSX and with Gmail

Ahh… good ol’ Pine. One of coolest little mail programs.

Step 1: Get MacPorts

Step 2: In terminal:
sudo port install alpine
Step 3: Launch alpine.
Step 4: Go to configuration options. Set up the options, as follows:
User Domain: user@gmail.com
SMTP Server: smtp.gmail.com:587/tls/novalidate-cert/user=user@gmail.com
Inbox Path:
  Name of Inbox server: imap.gmail.com/ssl/novalidate-cert/user=user@gmail.com
  Folder on “imap.gmail.com/ss…” to use for INBOX [inbox]: just press enter here.
Final settings:

That’s it!

Sweet.

Note the potentially insecure novalidate-cert because Google’s certificate is considered invalid, and I didn’t feel like going and finding how to add this cert properly.

Colorized output for ls on Mac OS X

Short route:

alias ls=”ls -G”
Permanent short route:
echo alias ls=\”ls -G\” >> ~/.bash_profile
Long explanation:
Mac OS X’s BSD-based implementation of ls does not have support for GNU-style long options such as ls –color. All its options are short options. To get color, you can pass -G.
So what we do is tell bash that whenever we type ls, we actually want to type ls -G.
alias ls=”ls -G”
ls also supports another way to turn on colorization, and this is to set environment variable CLICOLORS.
export CLICOLORS=1
You can also reconfigure the colors used. Some people recommend this colorset:
export LSCOLORS=dxfxcxdxbxegedabagacad
What does this mean? Each letter is one color. For example, d is brown, x is default background and foreground, B is bold red, etc. Each position determines function. Straight from the horse’s mouth (man ls):
                     The color designators are as follows:

                           a     black
                           b     red
                           c     green
                           d     brown
                           e     blue
                           f     magenta
                           g     cyan
                           h     light grey
                           A     bold black, usually shows up as dark grey
                           B     bold red
                           C     bold green
                           D     bold brown, usually shows up as yellow
                           E     bold blue
                           F     bold magenta
                           G     bold cyan
                           H     bold light grey; looks like bright white
                           x     default foreground or background

                     Note that the above are standard ANSI colors.  The actual
                     display may differ depending on the color capabilities of
                     the terminal in use.

                     The order of the attributes are as follows:

                           1.   directory
                           2.   symbolic link
                           3.   socket
                           4.   pipe
                           5.   executable
    
                      6.   block special
                           7.   character special
                           8.   executable with setuid bit set
                           9.   executable with setgid bit set
                           10.  directory writable to others, with sticky bit
                           11.  directory writable to others, without sticky
                                bit

                     The default is “exfxcxdxbxegedabagacad”, i.e. blue fore-
                     ground and default background for regular directories,
                     black foreground and red background for setuid executa-
                     bles, etc.

close() of listening socket from another thread

Just a warning.

Calling close() on listening socket in another thread will NOT prevent another connection from being made. Instead, you must call shutdown(). This should abort existing select() calls (probably accept() too, but I didn’t try).

Guess how I found out 🙂

sudo make me a sandwich

xkcd 149 – punch this in your terminal:

cat > Makefile << _EOF
SHELL=/bin/bash
all: sandwich
me:
`echo $'\t'`@touch me
a:
`echo $'\t'`@if [ -e me ]; then rm me; touch a; fi
sandwich:
`echo $'\t'`@bash -c 'if [ -e a ]; then rm a; if [ \`whoami\` == "root" ] ; then echo "Ok"; else echo "Make it yourself"; fi; else echo "...?"; fi'
_EOF

After that, try telling your command line to make you a sandwich, like this:

$ make me a sandwich
Make it yourself
$ sudo make me a sandwich
[sudo] password for ivucica:
Ok
$

corrected on August 11 2009, to adjust for differences in Ubuntu’s shell 🙂
corrected on September 24 2015, to explicitly specify use of /bin/bash and fix breakage on Debian Jessie