Paul's Programming Notes     Archive     Feed     Github

LDAP_ADD PHP - Object Class Violation

If you are trying to use php's ldap_add to add an user and are getting an object class violation, try to copy all the fields of a working user exactly. Most likely you are missing some of the required fields of the objectclass you are trying to add.

Reading RFID With Raspberry Pi (or any linux device) + Reader

I'm using the following Parallax USB RFID reader:

First you will need to ensure you have PySerial installed by trying to "import PySerial" while running Python's IDLE. If you receive an error:
    Install PySerial:
      1. Install python's setuptools: apt-get install python-setuptools
      2. Install PySerial: pip install pyserial

    Once you have PySerial installed, open IDLE again and use the following code to see output from the reader:

    Why didn't return the same unique identifier as what is written on the fob?:
    • If the key on the card says 30788590 and the reader returns 3501D5CBEE. The "1D5CBEE" part is the card number. Try going from the card number in DEC to HEX it in the windows calculator while it's in scientific mode if you don't believe me.

    "margin-left: auto;" and "margin-right: auto;" Not Working In IE8

    To get something centered within a div in IE8, it requires doing something unusual. I wasn't able to get the "display: block;" trick working. But this worked:

    #super-wrap { position: absolute; width: 100%; text-align: center; } 
    #page-wrap { position: relative; width: 970px; margin: auto auto;  }

    I had to do this to get the InfoGrid ( to center in IE8. The div with the ID of #page-wrap already exists, but the super-wrap div needs to be created outside of the page-wrap div.

    Using "nth-of-type" with IE8

    IE8 apparently doesn't support the CSS selector "nth-of-type".

    You can fix it by adding this script to your page:

    You will also need to add the following script to the bottom of your page (of course you will need to swap the numbers with your own):

    $("div:nth-of-type(1)").css("background", "#b44835");

    I used this to fix an IE8 compatibility issue with something called InfoGrid:

    Function To Find Largest UID Number In LDAP

     I got most of this function from It will find all the uidNumbers, sorting them largest to smallest, then return the largest number.

    $ds = ldap_connect("localhost");  // assuming the LDAP server is on this host

        function findLargestUidNumber($ds)
          $s = ldap_search($ds, "ou=people,dc=yourdomain,dc=com", 'uidnumber=*');
          if ($s)
             // there must be a better way to get the largest uidnumber, but I can't find a way to reverse sort.
             ldap_sort($ds, $s, "uidnumber");

             $result = ldap_get_entries($ds, $s);
             $count = $result['count'];
             $biguid = $result[$count-1]['uidnumber'][0];
             return $biguid;
          return null;

    $largestUID = findLargestUidNumber($ds);

    LDAP shadowlastchange - Weird Date Format

    I'm working on a PHP script that adds an user to a directory using LDAP.

    Here's the formula required to get the date format that shadowlastchange uses:
    $unixTimeDays = floor(time()/86400);

    It's the days since the last epoch.

    Py2exe Issues

    When getting the directory of the file you're executing in python use the correct example:

    CORRECT: os.path.abspath(os.path.dirname(sys.argv[0]))
    INCORRECT: os.path.dirname(inspect.getsourcefile( lambda:None ))

    If you're using py2exe, the incorrect example will just give error messages.