ป้ายกำกับ

วันศุกร์ที่ 12 เมษายน พ.ศ. 2556

Using Bugzilla Account with Subversion Problem

ผมได้พยายามติดตั้ง Bugzilla และ Subversion ให้ใช้งานร่วมกัน โดยอยากจะใช้ account ร่วมกัน ซึ่ง Bugzilla นั้น มีการจัดการ account ในฐานข้อมูล MySQL อยู่แล้ว ส่วน Subversion นั้นจัดการ account ผ่าน user ของระบบปฏิบัติการ แต่หากติดตั้งให้ทำงานผ่าน Apache Web Server เราก็สามารถควบคุมการ Authentication จาก account ในฐานข้อมูล MySQL ได้ด้วย module auth_mysql ได้

แต่ปัญหามีอยู่ว่า รหัสผ่านที่ Bugzilla เก็บไว้ในคอลลั่มน์ cryptpassword ของตาราง profiles ในฐานข้อมูลนั้น มีการเติมข้อความ "{ชื่อ digest algorithm}" ต่อท้ายไว้ ทำให้ auth_mysql ไม่สามารถเปรียบเทียบค่า digest ของรหัสผ่านได้ แม้จะใส่รหัสได้ถูกต้องตรงกันแล้วก็ตาม

ปัญหานี้ ได้มีการแนะนำให้เข้าไปแก้ไขไฟล์ Bugzilla/Constants.pm โดยกำหนดให้ตัวแปร PASSWORD_DIGEST_ALGORITHM ไม่ต้องใส่ค่าใดๆ

PASSWORD_DIGEST_ALGORITHM = ''

เมื่อเราเปลี่ยนรหัสผ่านใน Bugzilla รหัสใหม่ก็จะถูกเข้ารหัสด้วยฟังก์ชัน crypt() ของระบบปฏิบัติการ และไม่ใส่ข้อความชื่อ digest algorithm ต่อท้าย ซึ่งจะทำให้ได้ค่าตรงกับที่ auth_mysql ต้องการ

จากการศึกษา เพื่อพยายามแก้ปัญหานี้ ทำให้ผมรู้ว่า MySQL ไม่มีฟังก์ชันที่จะแปลงข้อความเป็น Base64 โดยเพิ่งจะมีใน version 5.6 ซึ่งเป็นรุ่นล่าสุดในปัจจุบัน แต่ Ubuntu 12.04 LTS ที่ผมใช้อยู่ มี MySQL 5.5 และได้รู้ว่า ฟังก์ชันเข้ารหัสของ MySQL นั้น มีหลายฟังก์ชัน แต่ทั้งหมดจะให้คำตอบมาเป็น hex ไม่ใช่ base64