comparison src/protocols/oscar/icq.c @ 5345:bfe98c4d331e

[gaim-migrate @ 5721] ICQ has a maximum password length of 8 characters, apparently. I made Gaim truncate that shizzle for ICQ. This fixes this: http://sourceforge.net/tracker/?func=detail&aid=732409&group_id=235&atid=100235 committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sat, 10 May 2003 15:33:48 +0000
parents 46fb754a3c10
children 6d3d8f11e765
comparison
equal deleted inserted replaced
5344:fda2d94b9434 5345:bfe98c4d331e
103 aim_tx_enqueue(sess, fr); 103 aim_tx_enqueue(sess, fr);
104 104
105 return 0; 105 return 0;
106 } 106 }
107 107
108 /**
109 * Change your ICQ password.
110 *
111 * @param sess The oscar session
112 * @param passwd The new password. If this is longer than 8 characters it
113 * will be truncated.
114 * @return Return 0 if no errors, otherwise return the error number.
115 */
108 faim_export int aim_icq_changepasswd(aim_session_t *sess, const char *passwd) 116 faim_export int aim_icq_changepasswd(aim_session_t *sess, const char *passwd)
109 { 117 {
110 aim_conn_t *conn; 118 aim_conn_t *conn;
111 aim_frame_t *fr; 119 aim_frame_t *fr;
112 aim_snacid_t snacid; 120 aim_snacid_t snacid;
113 int bslen; 121 int bslen, passwdlen;
114 122
115 if (!passwd) 123 if (!passwd)
116 return -EINVAL; 124 return -EINVAL;
117 125
118 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) 126 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015)))
119 return -EINVAL; 127 return -EINVAL;
120 128
121 bslen = 2+4+2+2+2+2+strlen(passwd)+1; 129 passwdlen = strlen(passwd);
130 if (passwdlen > MAXICQPASSLEN)
131 passwdlen = MAXICQPASSLEN;
132 bslen = 2+4+2+2+2+2+passwdlen+1;
122 133
123 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) 134 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen)))
124 return -ENOMEM; 135 return -ENOMEM;
125 136
126 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); 137 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0);
133 aimbs_putle16(&fr->data, bslen - 2); 144 aimbs_putle16(&fr->data, bslen - 2);
134 aimbs_putle32(&fr->data, atoi(sess->sn)); 145 aimbs_putle32(&fr->data, atoi(sess->sn));
135 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ 146 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */
136 aimbs_putle16(&fr->data, snacid); /* eh. */ 147 aimbs_putle16(&fr->data, snacid); /* eh. */
137 aimbs_putle16(&fr->data, 0x042e); /* shrug. */ 148 aimbs_putle16(&fr->data, 0x042e); /* shrug. */
138 aimbs_putle16(&fr->data, strlen(passwd)+1); 149 aimbs_putle16(&fr->data, passwdlen+1);
139 aimbs_putraw(&fr->data, passwd, strlen(passwd)); 150 aimbs_putraw(&fr->data, passwd, passwdlen);
140 aimbs_putle8(&fr->data, '\0'); 151 aimbs_putle8(&fr->data, '\0');
141 152
142 aim_tx_enqueue(sess, fr); 153 aim_tx_enqueue(sess, fr);
143 154
144 return 0; 155 return 0;