I understand why Smirk wants this, I thought to myself, but I **still** don't like them.
I was neck deep in PHP [1] and shell scripts, trying to figure out what the heck Ravencore [2] (a control panel—sigh) was doing when configuring the IMAP (Internet Message Access Protocol) and POP (Post Office Protocol) servers. You see, the IMAP and POP servers weren't authenticating the users—or rather, they were, but for some reason were not authenticating against the passwords set for the users.
It took a good half hour or so to track the problem down to a shell script that regenerated the password file for the IMAP and POP servers. The script generated the following from MySQL [3]:
>
```
4:testuser:example.net:true::guessme
```
Six fields, separated by colons—and if you look closely, you'll notice that one of the fields is empty. Keep that in mind, it's an important point. Then it was doing the following:
>
```
# separate the string into a temp variable so we don't
# have to make several calls to to the sed command
tmp=$(echo $i | sed 's/:/ /g')
mid=$(echo $tmp | awk '{print $1}')
mail_name=$(echo $tmp | awk '{print $2}')
domain_name=$(echo $tmp | awk '{print $3}')
mailbox=$(echo $tmp | awk '{print $4}')
spam_folder=$(echo $tmp | awk '{print $5}')
mail_pass=$(echo $tmp | awk '{print $6}')
email_addr="$mail_name@$domain_name"
```
The problem?
The first line, the one that calls sed to remove the colons. It transforms the line from MySQL to:
>
```
4 testuser example.net true guessme
```
So there's only five fields instead of six! So the password was being set to nothing (there is no [DELETED-spoon-DELETED] sixth field).
The fix was simple:
>
```
mid=$(echo $i | cut -d: -f1)
mail_name=$(echo $i | cut -d: -f2)
domain_name=$(echo $i | cut -d: -f3)
mailbox=$(echo $i | cut -d: -f4)
spam_folder=$(echo $i | cut -d: -f5)
mail_pass=$(echo $i | cut -d: -f6)
```
Have I mentioned that I hate control panels?