FOSSology  4.5.1
Open Source License Compliance by Open Source Software
parse.c
Go to the documentation of this file.
1 /*
2  SPDX-FileCopyrightText: © 2006-2015 Hewlett-Packard Development Company, L.P.
3  SPDX-FileCopyrightText: © 2017-2019 Bittium Wireless Ltd.
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 /* Equivalent to version 1.83 of Core Nomos code. */
8 #include <ctype.h>
9 
10 #include "nomos.h"
11 
12 #include "parse.h"
13 #include "list.h"
14 #include "util.h"
15 #include "nomos_regex.h"
16 #include "nomos_utils.h"
17 #include <_autodefs.h>
18 
19 /* DEBUG
20 #define DOCTOR_DEBUG 1
21 #define PROC_TRACE 1
22  DEBUG */
23 
40 #define _mGPL 0
41 #define _mLGPL 1
42 #define _mGFDL 2
43 #define _mQPL 3
44 #define _mPYTHON 4
45 #define _mPYTH_TEXT 5
46 #define _mAPACHE 6
47 #define _mHP 7
48 #define _mPHP 8
49 #define _mMIT 9
50 #define _mXOPEN 10
51 #define _mREDHAT 11
52 #define _mISC 12
53 #define _mCMU 13
54 #define _mOSF 14
55 #define _mSUN 15
56 #define _mALADDIN 16
57 #define _mCUPS 17
58 #define _fOPENLDAP 18
59 #define _fBSD 19
60 #define _fGPL 20
61 #define _mCDDL 21
62 #define _mLIBRE 22
63 #define _mGSOAP 23
64 #define _mMPL 24
65 #define _fATTRIB 25
66 #define _fREAL 26
67 #define _fIETF 27
68 #define _fDOC 28
69 #define _fMSCORP 29
70 #define _fW3C 30
71 #define _mAPTANA 31
72 #define _tOPENLDAP 32
73 #define _mNTP 33 // To avoid W3C-style detection
74 #define _fIP 34
75 #define _fANTLR 35
76 #define _fCCBY 36
77 #define _fZPL 37
78 #define _fCLA 38
79 #define _fODBL 39
80 #define _fPDDL 40
81 #define _fRUBY 41
82 #define _fSAX 42
83 #define _fAPL 43
84 #define _fARTISTIC 44
85 #define _fCITRIX 45
86 #define _fPURDUE 46
87 #define _fUNICODE 47
88 #define _fOFL 48
89 #define _mAPACHE10 49
90 #define _mAPACHE11 50
91 #define _mWORDNET 51
92 #define _fNCSA 52
93 #define _fTCL 53
94 #define _fIJG 54
95 #define _msize _fIJG+1
97 
101 static struct {
102  char *base;
103  int sso;
104  int seo;
105  int index;
107 
108 
109 #ifdef PRECHECK
110 extern void preloadResults(char *filetext, char *ltsr);
111 #endif /* PRECHECK */
112 
118 int findPhrase(int, char *,int, int, int, int);
119 int famOPENLDAP(char *, int ,int, int);
120 int checkUnclassified(char *, int, int, int, int, int);
121 int checkPublicDomain(char *, int, int, int, int, int);
122 static int dbgIdxGrep(int, char *, int);
123 #ifdef LTSR_DEBUG
124 void showLTCache(char *);
125 #endif /* LTSR_DEBUG */
126 void checkCornerCases(char *, int, int, int, int, int, int, int);
127 void checkFileReferences(char *, int, int, int, int, int);
128 void addRef(char *, int);
129 #ifdef DOCTOR_DEBUG
130 void dumpMatch(char *, char *);
131 #endif /* DOCTOR_DEBUG */
132 void locateRegex(char *, item_t *, int, int, int, int);
133 void saveRegexLocation(int, int, int, int);
134 void saveUnclBufLocation(int);
135 void saveLicenseParagraph(char *, int , int , int);
136 char *cplVersion(char *, int, int, int);
137 static char *gplVersion(char *, int, int, int);
138 char *lgplVersion(char *, int, int, int);
139 char *agplVersion(char *, int, int, int);
140 char *gfdlVersion(char *, int, int, int);
141 char *lpplVersion(char *, int, int, int);
142 char *mplNplVersion(char *, int, int, int);
143 char *pythonVersion(char *, int, int, int);
144 static char *realVersion(char *, int, int, int, int);
145 static char *sisslVersion(char *, int, int, int);
146 char *aslVersion(char *, int, int, int);
147 char *cddlVersion(char *, int, int, int);
148 char *ccVersion(char *, int, int, int);
149 char *oslVersion(char *, int, int, int);
150 char *aflVersion(char *, int, int, int);
151 static int match3(int, char *, int, int, int, int);
152 void spdxReference(char *, int, int, int);
153 void copyleftExceptions(char *, int, int, int);
155 
164 static char licStr[myBUFSIZ];
165 
166 static char ltsr[NFOOTPRINTS];
168 static char name[256];
169 static char lmem[_msize];
170 static list_t searchList;
171 static list_t whereList;
172 static list_t whCacheList;
173 static int refOffset;
174 static int maxInterest;
175 static int pd;
177 static int crCheck;
178 static int checknw;
179 static int lDebug = 0;
180 static int lDiags = 0;
182 
188 #define PARSE_ARGS filetext, size, isML, isPS
189 #define LVAL(x) (ltsr[x] & LTSR_RMASK)
190 #define SEEN(x) (ltsr[x] & LTSR_SMASK)
191 #define INFILE(x) fileHasPatt(x, PARSE_ARGS, 0)
192 #define NOT_INFILE(x) !( fileHasPatt(x, PARSE_ARGS, 0) && clearLastElementOfLicenceBuffer() )
193 #define RM_INFILE(x) fileHasPatt(x, PARSE_ARGS, 1)
194 #define GPL_INFILE(x) fileHasPatt(x, PARSE_ARGS, 2)
195 #define PERL_INFILE(x) fileHasPatt(x, PARSE_ARGS, 3)
196 #define NY_INFILE(x) fileHasPatt(x, PARSE_ARGS, 4)
197 #define X_INFILE(x, y) fileHasPatt(x, PARSE_ARGS, y)
198 #define DEBUG_INFILE(x) printf(" Regex[%d] = \"%s\"\nINFILE(%d) = %d\n", x, _REGEX(x), x, INFILE(x));
199 #define HASREGEX(x, cp) idxGrep(x, cp, REG_ICASE|REG_EXTENDED)
200 #define HASREGEX_RI(x, cp) idxGrep_recordIndex(x, cp, REG_ICASE|REG_EXTENDED)
201 #define HASTEXT(x, fl) idxGrep_recordIndex(x, filetext, REG_ICASE|fl)
202 #define URL_INFILE(x) (INFILE(x) || fileHasPatt(x, PARSE_ARGS, -1))
203 #define CANSKIP(i,x,y,z) ((i >= y) && (i <= z) && !(kwbm & (1 << (x - _KW_first))))
204 #define HASKW(x, y) (x & (1 << (y - _KW_first)))
205 #define TRYGROUP(x) x(PARSE_ARGS)
206 #define LOWINTEREST(x) addRef(x, IL_LOW)
207 #define MEDINTEREST(x) addRef(x, IL_MED)
208 //#define INTERESTING(x) printf("INTERESTING: %s, %d, %s\n", __FILE__, __LINE__, x);addRef(x, IL_HIGH)
209 #define INTERESTING(x) addRef(x, IL_HIGH)
210 #define ASLVERS() aslVersion(PARSE_ARGS)
211 #define CCVERS() ccVersion(PARSE_ARGS)
212 #define AFLVERS() aflVersion(PARSE_ARGS)
213 #define OSLVERS() oslVersion(PARSE_ARGS)
214 #define CPLVERS() cplVersion(PARSE_ARGS)
215 #define GPLVERS() gplVersion(PARSE_ARGS)
216 #define LGPLVERS() lgplVersion(PARSE_ARGS)
217 #define AGPLVERS() agplVersion(PARSE_ARGS)
218 #define GFDLVERS() gfdlVersion(PARSE_ARGS)
219 #define CDDLVERS() cddlVersion(PARSE_ARGS)
220 #define LPPLVERS() lpplVersion(PARSE_ARGS)
221 #define MPLVERS() mplNplVersion(PARSE_ARGS)
222 #define PYTHVERS() pythonVersion(PARSE_ARGS)
223 #define SISSLVERS() sisslVersion(PARSE_ARGS)
224 #define REALVERS(x) realVersion(PARSE_ARGS, x)
225 #define PR_REGEX(x) printf("check %d = %s\n", x, _REGEX(x));
226 #define mCR_CMU() (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2))
227 #define mCR_EDIN() (INFILE(_CR_EDINBURGH_1) || INFILE(_CR_EDINBURGH_2))
228 #define mCR_FSF() (INFILE(_CR_FSF1) || INFILE(_CR_FSF2))
229 #define mCR_HP() (INFILE(_CR_HP_1)|| INFILE(_CR_HP_2) || INFILE(_CR_DEC) || INFILE(_CR_EDS))
230 #define mCR_IETF() (INFILE(_CR_IETF_1) || INFILE(_CR_IETF_2))
231 #define mCR_MIT() (INFILE(_CR_MIT1) || INFILE(_CR_MIT2))
232 #define mCR_X11() (INFILE(_CR_X11) || INFILE(_CR_XFREE86))
233 #define mCR_IPTC() (INFILE(_CR_IPTC1) || INFILE(_CR_IPTC2))
234 #define SPDXREF() spdxReference(PARSE_ARGS)
235 #define EXCEPTIONS() copyleftExceptions(PARSE_ARGS)
237 
248 static int fileHasPatt(int licTextIdx, char *filetext, int size,
249  int isML, int isPS, int qType)
250 {
251  int ret = 0;
252  int show = 0;
253  item_t *ip;
254 
255 #ifdef PROC_TRACE
256  traceFunc("== fileHasPatt(size=%d, isML=%d, isPS=%d, qType=%d, idx=%d)\n",
257  size, isML, isPS, qType, licTextIdx);
258 
259 #endif /* PROC_TRACE */
260 
261  /*
262  * If qType is negative, then we should call idxGrep to look at the
263  * raw text of the file; non-negative value means look in the doctored
264  * text buffers...
265  */
266  if ((qType >= 0) && (qType & FL_SHOWMATCH)) {
267  qType &= ~FL_SHOWMATCH;
268  show = FL_SHOWMATCH;
269  }
270  if (qType < 0) {
271  ret = idxGrep_recordPosition(licTextIdx, filetext, REG_ICASE | REG_EXTENDED | show);
272  if (lDiags && ret) {
273 #ifdef DOCTOR_DEBUG
274  dumpMatch(filetext, "RAW-Text");
275 #endif /* DEBUG */
276  printRegexMatch(licTextIdx, NO);
277  saveRegexLocation(licTextIdx, cur.regm.rm_so,
278  cur.regm.rm_eo - cur.regm.rm_so, YES);
279 #ifdef DEBUG
280  printf("WINDOW-RAW: offset %d, length %d\n",
281  cur.regm.rm_so, cur.regm.rm_eo - cur.regm.rm_so);
282 #endif /* DEBUG */
283  }
284  return(ret);
285  }
286  if (SEEN(licTextIdx)) {
287 #ifdef LTSR_DEBUG
288  printf("Cache hit: ltsr[%d] = 0x%x\n", licTextIdx, ltsr[licTextIdx]);
289 #endif /* LTSR_DEBUG */
290  if (lDiags && (ltsr[licTextIdx] & LTSR_YES) == LTSR_YES) {
291  printRegexMatch(licTextIdx, YES);
292  (void) sprintf(name, "reg%04d", licTextIdx);
293  ip = listGetItem(&whCacheList, name);
294  if (ip->bIndex != licTextIdx) {
295  listDump(&whCacheList, NO);
296  LOG_FATAL("Offset-cache (\"%s\") == %d, not %d!", name, ip->bIndex, licTextIdx)
297  Bail(-__LINE__);
298  }
299  saveRegexLocation(licTextIdx, ip->bStart, ip->bLen, NO);
300  }
301  return(ltsr[licTextIdx] & LTSR_RMASK);
302  }
303  return(findPhrase(licTextIdx, PARSE_ARGS, qType));
304 }
305 
316 static int dbgIdxGrep(int licTextIdx, char *buf, int show)
317 {
318  int ret;
319  int flags = REG_ICASE|REG_EXTENDED;
320 
321  if (SEEN(licTextIdx)) {
322  return(ltsr[licTextIdx] & LTSR_RMASK);
323  }
324 
325  if (show) {
326  flags |= FL_SHOWMATCH;
327  }
328  ret = idxGrep(licTextIdx, buf, flags);
329  if (lDiags && ret) {
330  printRegexMatch(licTextIdx, NO);
331  saveRegexLocation(licTextIdx, cur.regm.rm_so,
332  cur.regm.rm_eo - cur.regm.rm_so, YES);
333  }
334  ltsr[licTextIdx] |= ret;
335  return ret;
336 }
337 
359 char *parseLicenses(char *filetext, int size, scanres_t *scp,
360  int isML, int isPS)
361 {
362  static int first = 1;
363  char *cp;
364  int i;
365  int j;
366  int nw = 0;
367  int score = scp->score;
368  int kwbm = scp->kwbm;
369 #ifdef PRECHECK
370  extern void preloadResults(char *, char *);
371 #endif /* PRECHECK */
372 
373 #if defined(PROC_TRACE) || defined(DOCTOR_DEBUG)
374  traceFunc("== parseLicenses(%p, %d, [%d, 0x%x], %d, %d)\n",
375  filetext, size, score, kwbm, isML, isPS );
376 #endif /* PROC_TRACE || DOCTOR_DEBUG */
377 
378  if (size == 0) {
379  LOWINTEREST("Empty-file-no-data!");
380  return(licStr+1);
381  }
382 
383  if (first) {
384  if (optionIsSet(OPTS_DEBUG)) {
385  lDebug = 1;
386  lDiags = 1;
387  }
388  listInit(&searchList, 0, "pattern-search list");
389  listInit(&whereList, 0, "regex-match locations list");
390  listInit(&whCacheList, 0, "regex-cache-match list");
391  first = 0;
392  }
393  crCheck = 0;
394  kludge.base = NULL_STR;
395  /*
396  * Interestingly enough, the headers for Nomos-generated file (e.g., the
397  * page containing the keywords found, file attributes and file text, etc.)
398  * contain enough data to confuse the parser in multiple ways... in the
399  * rare event we encounter a data file we generated, skip the header.
400  *****
401  * AND, not all nomos-created files have the same header(s).
402  */
403  pd = -1; /* unchecked */
404  cp = filetext;
405  maxInterest = IL_INIT;
406  cur.licPara = NULL_STR; /* unclassified license data */
407  gl.flags &= ~FL_FRAGMENT;
408 #ifdef FLAG_NO_COPYRIGHT
409  gl.flags &= ~FL_NOCOPYRIGHT;
410 #endif /* FLAG_NO_COPYRIGHT */
411  if (scp->dataOffset && lDiags) {
412  LOG_NOTICE("%s-generated link, ignore header (%d bytes)!",
413  gl.progName, scp->dataOffset);
414  }
415 
416  /*
417  * It's been observed over time that the file-magic() stuff doesn't always
418  * identify everything correctly. One case in particular is PostScript files
419  * when the "%%PS" directive isn't the first line in a file... but the rest
420  * of the data really IS PostScript
421  */
422  if (!isPS && (strncasecmp(filetext, "%%page:", 7) == 0 || strncasecmp(filetext, "{\\rtf", 5) == 0)) {
423 #if defined(DEBUG) || defined(DOCTOR_DEBUG)
424  printf("File is really postscript, %s filetext !\n", filetext);
425 #endif /* DEBUG || DOCTOR_DEBUG */
426  isPS = 1;
427  }
428 
429  *licStr = NULL_CHAR;
430  refOffset = 0;
431  (void) memset(ltsr, 0, sizeof(ltsr));
432  (void) memset(lmem, 0, sizeof(lmem));
433 #if defined(DEBUG) && defined(LTSR_DEBUG)
434  showLTCache("LTSR-results START:");
435 #endif /* DEBUG && LTSR_DEBUG */
436 #ifdef PRECHECK
437  preloadResults(/*PARSE_ARGS*/filetext, ltsr);
438 #endif /* PRECHECK */
439 #ifdef MEMSTATS
440  memStats("parseLicenses: BOP");
441 #endif /* MEMSTATS */
442  lmem[_mPYTH_TEXT] = HASTEXT(_TEXT_PYTHON, 0);
443  lmem[_tOPENLDAP] = HASTEXT(_TEXT_OPENLDAP, 0);
444  (void) INFILE(_TEXT_GNU_LIC_INFO);
445 #ifdef LTSR_DEBUG
446  showLTCache("LTSR-results INIT-SCAN:");
447 #endif /* LTSR_DEBUG */
448  /*
449  * MySQL.FLOSS exception
450  */
451  if (INFILE(_LT_MYSQL_EXCEPT) || INFILE(_PHR_FREE_LIBRE)) {
452  if (INFILE(_TITLE_ALFRESCO)) {
453  INTERESTING("Alfresco-FLOSS");
454  }
455  else if (HASTEXT(_TEXT_ALFRESCO, 0)) {
456  INTERESTING("Alfresco");
457  }
458  else if (INFILE(_CR_MYSQL) || INFILE(_TITLE_mysql_floss_exception)) {
459  if (INFILE(_TITLE_MYSQL_V03)) {
460  INTERESTING("MySQL-0.3");
461  }
462  else {
463  INTERESTING("mysql-floss-exception");
464  }
465  }
466  else {
467  INTERESTING("MySQL-style");
468  }
469  lmem[_mLIBRE] = 1;
470  }
471  /*
472  * Some RealNetworks licenses included a list of "compatible" licenses that
473  * can confuse the license-detection algorithms within. Look for these early
474  * in the process, and ignore the known (false) matches when we detect the
475  * RPSL/RCSL licenses.
476  */
477  if (HASTEXT(_TEXT_REALNET, REG_EXTENDED)) {
478  /*
479  * List of other licenses should be excluded only if full license text is found
480  */
481  if (INFILE(_LT_RPSL_COMPATIBLE)) {
482  lmem[_fREAL] = 1;
483  }
484  if (INFILE(_LT_REAL_RPSL)) {
485  cp = REALVERS(_TITLE_RPSL);
486  INTERESTING(lDebug ? "RPSL" : cp);
487  }
488  else if (INFILE(_LT_REAL_RPSLref)) {
489  cp = REALVERS(_TITLE_RPSL);
490  INTERESTING(lDebug ? "Real-RPSL(ref)" : cp);
491  }
492  if (INFILE(_LT_REAL_RCSL)) {
493  cp = REALVERS(_TITLE_RCSL);
494  INTERESTING(lDebug ? "RCSL" : cp);
495  }
496  else if (INFILE(_LT_REAL_RCSLref)) {
497  cp = REALVERS(_TITLE_RCSL);
498  INTERESTING(lDebug ? "Real-RCSL(ref)" : cp);
499  }
500  if (INFILE(_TITLE_REAL_EULA)) {
501  INTERESTING("RealNetworks-EULA");
502  }
503  else if (INFILE(_LT_HELIX_TITLE)) {
504  INTERESTING("Helix.RealNetworks-EULA");
505  }
506  }
508  /*
509  * Zope - this license is explicitly listed (by title) in several other
510  * licenses...
511  */
512  if (!lmem[_mLIBRE] && !lmem[_fREAL] && INFILE(_TITLE_ZOPE)) {
513  if (INFILE(_TITLE_ZOPE_V21)) {
514  INTERESTING("ZPL-2.1");
515  lmem[_fZPL] = 1;
516  }
517  else if (INFILE(_TITLE_ZOPE_V20)) {
518  INTERESTING("ZPL-2.0");
519  lmem[_fZPL] = 1;
520  }
521  else if (INFILE(_TITLE_ZOPE_V10)) {
522  INTERESTING("ZPL-1.0");
523  lmem[_fZPL] = 1;
524  }
525  else if (INFILE(_TITLE_ZOPE_V11)) {
526  INTERESTING("ZPL-1.1");
527  lmem[_fZPL] = 1;
528  }
529  else if (INFILE(_SPDX_ZPL_11)) {
530  INTERESTING("ZPL-1.1");
531  lmem[_fZPL] = 1;
532  }
533  else if (INFILE(_SPDX_ZPL_20)) {
534  INTERESTING("ZPL-2.0");
535  lmem[_fZPL] = 1;
536  }
537  else if (INFILE(_SPDX_ZPL_21)) {
538  INTERESTING("ZPL-2.1");
539  lmem[_fZPL] = 1;
540  }
541  else if (INFILE(_TITLE_ZIMBRA_13)) {
542  INTERESTING("Zimbra-1.3");
543  }
544  else if (INFILE(_TITLE_ZIMBRA_12)) {
545  INTERESTING("Zimbra-1.2");
546  }
547  else {
548  INTERESTING(lDebug ? "Zope(ref)" : "ZPL");
549  lmem[_fZPL] = 1;
550  }
551  }
553  /*
554  * Check Apache licenses before BSD
555  */
556  if (HASTEXT(_PHR_Apache_ref0, REG_EXTENDED) || INFILE(_PHR_Apache_ref7) || INFILE(_TITLE_Apache)) {
557  cp = ASLVERS();
558  INTERESTING(cp);
559  }
561  /*
562  * BSD and all the variant 'flavors'. BSD licenses are kind of like
563  * the cooking concept of 'the mother sauces' -- MANY things are derived
564  * from the wordings of these licenses. There are still many more, for
565  * certain, but LOTS of licenses are based on ~10 originally-BSD-phrases.
566  */
567  if (INFILE(_LT_BSD_1)) {
568  if (INFILE(_TITLE_PHP301)) {
569  INTERESTING(lDebug ? "PHP(v3.01#1)" : "PHP-3.01");
570  lmem[_mPHP] = 1;
571  }
572  else if (INFILE(_TITLE_PHP30)) {
573  INTERESTING(lDebug ? "PHP(v3.0#1)" : "PHP-3.0");
574  lmem[_mPHP] = 1;
575  }
576  else if (INFILE(_TITLE_PHP202)) {
577  INTERESTING(lDebug ? "PHP(v2.02#1)" : "PHP-2.02");
578  lmem[_mPHP] = 1;
579  }
580  else if (INFILE(_CR_VOVIDA) || INFILE(_TITLE_VOVIDA)) {
581  INTERESTING("VSL-1.0");
582  lmem[_fBSD] = 1;
583  }
584  else if (INFILE(_CR_NAUMEN) || INFILE(_TITLE_NAUMEN)) {
585  INTERESTING("Naumen");
586  }
587  else if (INFILE(_CR_ENTESSA) || INFILE(_TITLE_ENTESSA)) {
588  INTERESTING("Entessa");
589  }
590  else if (INFILE(_LT_ATTRIB) || INFILE(_TITLE_ATTRIBUTION)) {
591  INTERESTING("AAL");
592  lmem[_fATTRIB] = 1;
593  }
594  else if (INFILE(_CR_ZOPE)) {
595  INTERESTING(lDebug ? "Zope(bsd)" : "ZPL");
596  }
597  else if (INFILE(_LT_Oracle_Berkeley_DB)) {
598  INTERESTING("Oracle-Berkeley-DB");
599  }
600  else if (INFILE(_CR_SLEEPYCAT) || INFILE(_LT_SLEEPYCAT_1)) {
601  MEDINTEREST(lDebug ? "Sleepycat(1)" : "Sleepycat");
602  }
603  else if (INFILE(_TITLE_ZEND_V20)) {
604  INTERESTING("Zend-2.0");
605  }
606  else if (!lmem[_fOPENLDAP] && !TRYGROUP(famOPENLDAP)) {
607  if (HASTEXT(_LT_OPENSSLref5, REG_EXTENDED)) {
608  INTERESTING(lDebug ? "OpenSSL(ref)" : "OpenSSL");
609  }
610  else if (INFILE(_LT_BSD_CLAUSE_0) && INFILE(_LT_BSD_CLAUSE_1) && INFILE(_LT_BSD_CLAUSE_2)) {
611  if (INFILE(_LT_BSD_CLAUSE_3) && (INFILE(_LT_BSD_CLAUSE_4) || INFILE(_LT_BSD_CLAUSE_4_LONG)) && INFILE(_LT_UC)) {
612  INTERESTING("BSD-4-Clause-UC");
613  }
614  else if (INFILE(_LT_BSD_CLAUSE_3) && (INFILE(_LT_BSD_CLAUSE_4) || INFILE(_LT_BSD_CLAUSE_4_LONG))) {
615  INTERESTING("BSD-4-Clause");
616  }
617  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_BSD_CLAUSE_CLEAR)) {
618  INTERESTING("BSD-3-Clause-Clear");
619  }
620  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_BSD_CLAUSE_OPEN_MPI)) {
621  INTERESTING("BSD-3-Clause-Open-MPI");
622  }
623  else if (INFILE(_LT_BSD_CLAUSE_4) && HASTEXT(_KW_severability, REG_EXTENDED)) {
624  INTERESTING("BSD-3-Clause-Severability");
625  }
626  else if (INFILE(_LT_XML_DB_V10)) {
627  INTERESTING("XMLDB-1.0");
628  }
629  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_ANT_BSD_RESTRICTION)) {
630  INTERESTING("ANT+SharedSource");
631  }
632  else if (!lmem[_mAPACHE11] && INFILE(_LT_Apache_11_CLAUSE_3) && INFILE(_LT_Apache_11_CLAUSE_4) && INFILE(_LT_Apache_11_CLAUSE_5)) {
633  INTERESTING(lDebug ? "BSD(Apache-1.1)" : "Apache-1.1-style");
634  }
635  else if(HASTEXT(_LT_Sendmail_823_title, 0)) {
636  INTERESTING("Sendmail-8.23");
637  }
638  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11] && INFILE(_LT_BSD_CLAUSE_ATTRIBUTION)) {
639  INTERESTING("BSD-3-Clause-Attribution");
640  }
641  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11] && INFILE(_LT_BSD_CLAUSE_4)) {
642  if (INFILE(_LT_DARPA_COUGAAR_2)) {
643  INTERESTING("DARPA-Cougaar");
644  }
645  else {
646  INTERESTING("BSD-3-Clause");
647  }
648  }
649  else if (INFILE(_LT_SSLEAY)) {
650  INTERESTING("SSLeay");
651  }
652  else if (INFILE(_LT_TMATE)) {
653  INTERESTING("TMate");
654  }
655  else if (INFILE(_LT_MUP)) {
656  INTERESTING("Mup");
657  }
658  else if (INFILE(_LT_FREE_BSD)) {
659  INTERESTING("BSD-2-Clause-FreeBSD");
660  }
661  else if (INFILE(_LT_BSD_CLAUSE_PATENT)) {
662  INTERESTING("BSD-2-Clause-Patent");
663  }
664  else if (INFILE(_CR_NETBSD)) {
665  INTERESTING("BSD-2-Clause-NetBSD");
666  }
667  else if (INFILE(_LT_MIT_0)) {
668  lmem[_mMIT] = 1;
669  INTERESTING("Linux-OpenIB");
670  }
671  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11]) {
672  INTERESTING("BSD-2-Clause");
673  }
674  }
675  else if (INFILE(_CR_CRYPTOGAMS)) {
676  INTERESTING("Cryptogams");
677  }
678  else if (INFILE(_LT_BSD_SHORTENED_CLAUSE_0) && INFILE(_LT_BSD_SHORTENED_CLAUSE_1) && INFILE(_LT_BSD_SHORTENED_CLAUSE_2) && INFILE(_LT_BSD_CLAUSE_3)) {
679  INTERESTING("BSD-4-Clause-Shortened");
680  }
681  else if (INFILE(_CR_BSDCAL)) {
682  INTERESTING(lDebug ? "BSD(1)" : "BSD");
683  }
684  else if (HASTEXT(_TEXT_ALTERED_SOURCE, REG_EXTENDED) && HASTEXT(_TEXT_ORIGIN, 0)) {
685  if (INFILE(_PHR_BZIP2_3)) {
686  INTERESTING("bzip2-1.0.5");
687  }
688  else if (HASTEXT(_PHR_BZIP2_4, REG_EXTENDED)) {
689  INTERESTING("bzip2-1.0.6");
690  }
691  else {
692  INTERESTING("bzip2");
693  }
694  }
695  else if (mCR_CMU()) {
696  INTERESTING(lDebug ? "CMU(BSD-ish)" : "CMU");
697  }
698  else if (INFILE(_LT_MTLL)) {
699  INTERESTING("MTLL");
700  }
701  else if (INFILE(_LT_BSD_CLAUSE_1_DISCLAIMER)) {
702  INTERESTING("BSD-1-Clause");
703  }
704  else if (INFILE(_LT_Spencer_99) && INFILE(_CR_Spencer)) {
705  INTERESTING("Spencer-99");
706  }
707  else if (!lmem[_fZPL]) {
708  INTERESTING(lDebug ? "BSD-style(1)" : "BSD-style");
709  }
710  }
711  lmem[_fBSD] = 1;
712  }
713  else if (INFILE(_LT_BSD_CLEAR_CLAUSE_0) && INFILE(_LT_BSD_CLAUSE_1) && INFILE(_LT_BSD_CLAUSE_2)) {
714  INTERESTING("BSD-3-Clause-Clear");
715  }
716  else if (INFILE(_PHR_Linux_OpenIB)) {
717  INTERESTING("Linux-OpenIB");
718  }
719  else if (INFILE(_LT_BSD_2)) {
720  /*
721  * Python, OSF, SecretLabs, some universities, some vendors, etc., have
722  * variants here.
723  */
724  if (INFILE(_CR_PYTHON) || INFILE(_TITLE_PYTHON)) {
725  cp = PYTHVERS();
726  INTERESTING(lDebug ? "Python(3)" : cp);
727  lmem[_mPYTHON] = 1;
728  }
729  else if (INFILE(_CR_OSF)) {
730  INTERESTING(lDebug ? "OSF(1)" : "OSF");
731  lmem[_mOSF] = 1;
732  }
733  else if (INFILE(_CR_UI)) {
734  INTERESTING(lDebug ? "UI(1)" : "Unix-Intl");
735  }
736  else if (INFILE(_CR_XOPEN)) {
737  INTERESTING(lDebug ? "XOpen(1)" : "X/Open");
738  lmem[_mXOPEN] = 1;
739  }
740  else if (INFILE(_PHR_HISTORICAL)) {
741  INTERESTING("HPND");
742  }
743  else if (INFILE(_LT_CMU_7)) {
744  if (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2) || INFILE(_CR_BSDCAL)) {
745  INTERESTING("MIT-CMU");
746  }
747  else {
748  INTERESTING("MIT-CMU-style");
749  }
750  lmem[_mCMU] = 1;
751  }
752  else if (INFILE(_CR_BSDCAL)) {
753  INTERESTING(lDebug ? "BSD(2)" : "BSD");
754  }
755  else if (INFILE(_LT_NTP)) {
756  INTERESTING("NTP");
757  }
758  else if (INFILE(_LT_WORDNET))
759  {
760  INTERESTING("WordNet-3.0");
761  lmem[_mMIT] = 1;
762  }
763  else if (INFILE(_LT_HPND_1) && INFILE(_LT_HPND_2)) {
764  INTERESTING("HPND");
765  lmem[_mMIT] = 1;
766  }
767  else if (INFILE(_LT_NOT_ADVERTISING)) {
768  INTERESTING(lDebug ? "BSD-style(2)" : "BSD-style");
769  }
770  else if (INFILE(_PHR_NO_WARRANTY_12)) {
771  INTERESTING(lDebug ? "ISC(BSD-style)" : "ISC-style");
772  }
773  else {
774  INTERESTING(lDebug ? "BSD-style(2)-MIT" : "MIT-style");
775  }
776  lmem[_fBSD] = 1;
777  }
778  else if (INFILE(_LT_BSD_3) && NOT_INFILE(_TITLE_OPENLDAP)) {
779  if (INFILE(_LT_AMPAS)) {
780  INTERESTING("AMPAS");
781  }
782  else if (INFILE(_CR_BSDCAL)) {
783  INTERESTING(lDebug ? "BSD(3)" : "BSD");
784  }
785  else if (INFILE(_TITLE_OZPLB_10)) {
786  INTERESTING("OZPLB-1.0");
787  }
788  /*
789  * JPNIC
790  */
791  else if (HASTEXT(_TEXT_JPNIC, 0) && INFILE(_LT_JPNIC)) {
792  INTERESTING("JPNIC");
793  }
794  else if (NOT_INFILE(_CR_XFREE86) && NOT_INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_INNERNET200)) {
795  INTERESTING(lDebug ? "BSD-style(3)" : "BSD-style");
796  }
797  lmem[_fBSD] = 1;
798  }
799  else if (INFILE(_LT_BSD_4)) {
800  if (INFILE(_CR_BSDCAL)) {
801  INTERESTING(lDebug ? "BSD(4)" : "BSD");
802  }
803  else {
804  INTERESTING(lDebug ? "BSD-style(4)" : "BSD-style");
805  }
806  lmem[_fBSD] = 1;
807  }
808  /*
809  * FIX-ME: this license text explicitly mentions "for no-profit", and as
810  * such it should list it in the license-summary, yes?
811  */
812  else if (INFILE(_LT_BSD_5)) {
813  if (!lmem[_mPYTHON] && INFILE(_CR_PYTHON)) {
814  INTERESTING(lDebug ? "Python(2)" : "Python");
815  lmem[_mPYTHON] = 1;
816  }
817  else if (INFILE(_CR_USL_EUR)) {
818  INTERESTING(lDebug ? "USLE(1)" : "USL-Europe");
819  }
820  else if (INFILE(_CR_BSDCAL)) {
821  INTERESTING(lDebug ? "BSD(5)" : "BSD");
822  }
823  else {
824  INTERESTING(lDebug ? "BSD-style(5)" : "BSD-style");
825  }
826  lmem[_fBSD] = 1;
827  }
828  else if (INFILE(_LT_BSD_6)) {
829  if (INFILE(_CR_BSDCAL)) {
830  INTERESTING(lDebug ? "BSD(6)" : "BSD");
831  }
832  else {
833  INTERESTING(lDebug ? "BSD-style(6)" : "BSD-style");
834  }
835  lmem[_fBSD] = 1;
836  }
837  else if (INFILE(_LT_BSD_7)) {
838  if (HASTEXT(_LT_MAKEINDEX_1, 0) && HASTEXT(_LT_MAKEINDEX_2, 0)) {
839  INTERESTING("MakeIndex");
840  }
841  else if (INFILE(_CR_BSDCAL)) {
842  INTERESTING(lDebug ? "BSD(7)" : "BSD");
843  }
844  else {
845  INTERESTING(lDebug ? "BSD-style(7)" : "BSD-style");
846  }
847  lmem[_fBSD] = 1;
848  }
849  else if (INFILE(_LT_BSD_8)) {
850  if (INFILE(_CR_BSDCAL)) {
851  INTERESTING(lDebug ? "BSD(8)" : "BSD");
852  }
853  else {
854  INTERESTING(lDebug ? "BSD-style(8)" : "BSD-style");
855  }
856  lmem[_fBSD] = 1;
857  }
858  else if (INFILE(_LT_BSD_9)) {
859  if (INFILE(_CR_BSDCAL)) {
860  INTERESTING(lDebug ? "BSD(9)" : "BSD");
861  }
862  else {
863  INTERESTING(lDebug ? "BSD-style(8)" : "BSD-style");
864  }
865  lmem[_fBSD] = 1;
866  }
867  else if (INFILE(_LT_BSD_10)) {
868  if (INFILE(_CR_BSDCAL)) {
869  INTERESTING(lDebug ? "BSD(10)" : "BSD");
870  }
871  else {
872  INTERESTING(lDebug ? "BSD-style(9)" : "BSD-style");
873  }
874  lmem[_fBSD] = 1;
875  }
876  else if (INFILE(_LT_BSD_11)) {
877  if (INFILE(_CR_BSDCAL)) {
878  INTERESTING(lDebug ? "BSD(11)" : "BSD");
879  }
880  else {
881  INTERESTING(lDebug ? "BSD-style(10)" : "BSD-style");
882  }
883  lmem[_fBSD] = 1;
884  }
885  else if (INFILE(_LT_BSD_12)) {
886  if (INFILE(_CR_BSDCAL)) {
887  INTERESTING(lDebug ? "BSD(12)" : "BSD");
888  }
889  else {
890  INTERESTING(lDebug ? "BSD-style(11)" : "BSD-style");
891  }
892  lmem[_fBSD] = 1;
893  }
894  else if (INFILE(_LT_BSD_13)) {
895  if (INFILE(_CR_BSDCAL)) {
896  INTERESTING(lDebug ? "BSD(13)" : "BSD");
897  }
898  else {
899  INTERESTING(lDebug ? "BSD-style(12)" : "BSD-style");
900  }
901  lmem[_fBSD] = 1;
902  }
903  else if (INFILE(_LT_BSD_NONC)) {
904  if (INFILE(_CR_BSDCAL)) {
905  INTERESTING(lDebug ? "BSD(NonC)" : "BSD.non-commercial");
906  }
907  else {
908  INTERESTING(lDebug ? "BSD-style(NonC)" : "Non-commercial");
909  }
910  lmem[_fBSD] = 1;
911  }
912  else if (INFILE(_SPDX_BSD_3_Clause_Clear)) {
913  INTERESTING("BSD-3-Clause-Clear");
914  }
915  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_License_2014)) {
916  INTERESTING("BSD-3-Clause-No-Nuclear-License-2014");
917  }
918  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_License)) {
919  INTERESTING("BSD-3-Clause-No-Nuclear-License");
920  }
921  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_Warranty)) {
922  INTERESTING("BSD-3-Clause-No-Nuclear-Warranty");
923  }
924  else if (INFILE(_SPDX_BSD_3_Clause_Attribution)) {
925  INTERESTING("BSD-3-Clause-Attribution");
926  }
927  else if (INFILE(_SPDX_BSD_3_Clause_LBNL)) {
928  INTERESTING("BSD-3-Clause-LBNL");
929  }
930  else if (INFILE(_SPDX_BSD_3_Clause_Open_MPI)) {
931  INTERESTING("BSD-3-Clause-Open-MPI");
932  }
933  else if (INFILE(_SPDX_BSD_3_Clause)) {
934  INTERESTING("BSD-3-Clause");
935  }
936  else if (INFILE(_PHR_BSD_3_CLAUSE_1) || INFILE(_PHR_BSD_3_CLAUSE_2) || INFILE(_PHR_BSD_3_CLAUSE_3) || INFILE(_PHR_BSD_3_CLAUSE_4)) {
937  INTERESTING(lDebug ? "BSD(phr1/2)" : "BSD-3-Clause");
938  }
939  else if (INFILE(_SPDX_BSD_2_Clause_FreeBSD)) {
940  INTERESTING("BSD-2-Clause-FreeBSD");
941  }
942  else if (INFILE(_SPDX_BSD_2_Clause_NetBSD)) {
943  INTERESTING("BSD-2-Clause-NetBSD");
944  }
945  else if (INFILE(_SPDX_BSD_2_Clause_Patent)) {
946  INTERESTING("BSD-2-Clause-Patent");
947  }
948  else if (INFILE(_SPDX_BSD_2_Clause_Views)) {
949  INTERESTING("BSD-2-Clause-Views");
950  }
951  else if (INFILE(_SPDX_BSD_2_Clause_1)) {
952  INTERESTING("BSD-2-Clause");
953  }
954  else if (INFILE(_SPDX_BSD_2_Clause_2)) {
955  INTERESTING("BSD-2-Clause");
956  }
957  else if (INFILE(_PHR_BSD_2_CLAUSE_1)
958  || INFILE(_PHR_BSD_2_CLAUSE_2)
959  || INFILE(_PHR_BSD_2_CLAUSE_3)
960  || INFILE(_PHR_BSD_2_CLAUSE_4)
961  || INFILE(_PHR_BSD_2_CLAUSE_5)
962  || INFILE(_PHR_BSD_2_CLAUSE_6)
963  || INFILE(_PHR_BSD_2_CLAUSE_7)) {
964  INTERESTING(lDebug ? "BSD(phr1/2/3/4/5/6)" : "BSD-2-Clause");
965  }
966  else if (INFILE(_SPDX_BSD_4_Clause_UC)) {
967  INTERESTING("BSD-4-Clause-UC");
968  }
969  else if (INFILE(_SPDX_BSD_4_Clause)) {
970  INTERESTING("BSD-4-Clause");
971  }
972  else if (INFILE(_PHR_BSD_4_CLAUSE_1)) {
973  INTERESTING(lDebug ? "BSD-4-Clause(phr1)" : "BSD-4-Clause");
974  }
975  else if (INFILE(_PHR_BSD_CLEAR_1)) {
976  INTERESTING(lDebug ? "BSD-Clear(phr1)" : "BSD-3-Clause-Clear");
977  }
978  else if (INFILE(_PHR_BSD_3_CLAUSE_LBNL)) {
979  INTERESTING("BSD-3-Clause-LBNL");
980  }
981  else if (INFILE(_SPDX_BSD_Protection)) {
982  INTERESTING("BSD-Protection");
983  }
984  else if (INFILE(_SPDX_BSD_Source_Code)) {
985  INTERESTING("BSD-Source-Code");
986  }
987  else if (INFILE(_SPDX_BSD_1_Clause)) {
988  INTERESTING("BSD-1-Clause");
989  }
990  else if (INFILE(_PHR_0BSD)) {
991  INTERESTING("0BSD");
992  }
993  else if (INFILE(_LT_BSDref1)) {
994  INTERESTING(lDebug ? "BSD(ref1)" : "BSD");
995  }
996  else if (INFILE(_LT_BSDref2)) {
997  INTERESTING(lDebug ? "BSD(ref2)" : "BSD");
998  }
999  else if (INFILE(_LT_BSDref3)) {
1000  INTERESTING(lDebug ? "BSD(ref3)" : "BSD");
1001  }
1002  else if (INFILE(_LT_BSDref4)) {
1003  INTERESTING(lDebug ? "BSD(ref4)" : "BSD");
1004  }
1005  else if (INFILE(_LT_BSDref5)) {
1006  INTERESTING(lDebug ? "BSD(ref5)" : "BSD");
1007  }
1008  else if (INFILE(_LT_BSDref6)) {
1009  INTERESTING(lDebug ? "BSD(ref6)" : "BSD");
1010  }
1011  else if (INFILE(_LT_BSDref7)) {
1012  INTERESTING(lDebug ? "BSD(ref7)" : "BSD");
1013  }
1014  else if (INFILE(_LT_BSDref8)) {
1015  INTERESTING(lDebug ? "BSD(ref8)" : "BSD");
1016  }
1017  else if (INFILE(_LT_BSDref9)) {
1018  INTERESTING(lDebug ? "BSD(ref9)" : "BSD");
1019  }
1020  else if (INFILE(_LT_BSDref10)) {
1021  INTERESTING(lDebug ? "BSD(ref10)" : "BSD");
1022  }
1023  else if (INFILE(_LT_BSDref11)) {
1024  INTERESTING(lDebug ? "BSD(ref11)" : "BSD");
1025  }
1026  else if (INFILE(_LT_BSDref12) || HASTEXT(_LT_BSDref13, REG_EXTENDED)) {
1027  INTERESTING(lDebug ? "BSD(ref12)" : "BSD-3-Clause");
1028  }
1029  else if (URL_INFILE(_URL_BSD_1) || URL_INFILE(_URL_BSD_2)) {
1030  INTERESTING(lDebug ? "BSD(url)" : "BSD");
1031  lmem[_fBSD] = 1;
1032  }
1033  else if (INFILE(_LT_BSDref14)) {
1034  INTERESTING(lDebug ? "BSD(ref14)" : "BSD");
1035  lmem[_fBSD] = 1;
1036  }
1037  else if (INFILE(_LT_BSDref15)) {
1038  INTERESTING(lDebug ? "BSD(ref15)" : "BSD");
1039  lmem[_fBSD] = 1;
1040  }
1041  else if (INFILE(_LT_BSDSTYLEref1)) {
1042  INTERESTING(lDebug ? "BSD-st(1)" : "BSD-style");
1043  lmem[_fBSD] = 1;
1044  }
1045  else if (INFILE(_LT_BSDSTYLEref2)) {
1046  INTERESTING(lDebug ? "BSD-st(2)" : "BSD-style");
1047  lmem[_fBSD] = 1;
1048  }
1049  else if (INFILE(_LT_BSDSTYLEref4)) {
1050  INTERESTING(lDebug ? "BSD-st(4)" : "BSD-style");
1051  lmem[_fBSD] = 1;
1052  }
1053  else if (INFILE(_LT_BSDSTYLEref3)) {
1054  INTERESTING(lDebug ? "BSD-st(3)" : "BSD-style");
1055  lmem[_fBSD] = 1;
1056  }
1057  else if (INFILE(_LT_BSD_HTMLAREA_1) || INFILE(_LT_BSD_HTMLAREA_2)) {
1058  INTERESTING(lDebug ? "BSD-htmlArea" : "BSD-3-Clause");
1059  lmem[_fBSD] = 1;
1060  }
1061  else if (INFILE(_FILE_BSD1) || INFILE(_FILE_BSD2)) {
1062  INTERESTING(lDebug ? "BSD(deb)" : "BSD");
1063  }
1065  /*
1066  * Aptana public license (based on MPL)
1067  */
1068  if (INFILE(_LT_APTANA)) {
1069  if (INFILE(_TITLE_APTANA_V10)) {
1070  INTERESTING("Aptana-1.0");
1071  }
1072  else {
1073  INTERESTING("Aptana");
1074  }
1075  lmem[_mMPL] = 1;
1076  lmem[_mAPTANA] = 1;
1077  }
1078  /*
1079  * PHP variants
1080  */
1081  if (!lmem[_mPHP] && INFILE(_LT_PHP)) {
1082  if (INFILE(_TITLE_PHP301)) {
1083  INTERESTING(lDebug ? "PHP(v3.01#2)" : "PHP-3.01");
1084  }
1085  else if (INFILE(_TITLE_PHP30)) {
1086  INTERESTING(lDebug ? "PHP(v3.0#2)" : "PHP-3.0");
1087  }
1088  else if (INFILE(_TITLE_PHP202)) {
1089  INTERESTING(lDebug ? "PHP(v2.02#3)" : "PHP-2.02");
1090  }
1091  else if (INFILE(_CR_PHP)) {
1092  INTERESTING(lDebug ? "PHP(1)" : "PHP");
1093  }
1094  else {
1095  INTERESTING("PHP-style");
1096  }
1097  lmem[_mPHP] = 1;
1098  }
1099  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V301_1)) {
1100  INTERESTING("PHP-3.01");
1101  lmem[_mPHP] = 1;
1102  }
1103  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_1)) {
1104  INTERESTING("PHP-3.0");
1105  lmem[_mPHP] = 1;
1106  }
1107  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_2)) {
1108  INTERESTING("PHP-3.0");
1109  lmem[_mPHP] = 1;
1110  }
1111  else if (!lmem[_mPHP] && INFILE(_LT_PHPref1)) {
1112  if (INFILE(_PHR_PHP_V301)) {
1113  INTERESTING(lDebug ? "PHP(ref-3.01)" : "PHP-3.01");
1114  }
1115  else if (INFILE(_PHR_PHP_V20)) {
1116  INTERESTING(lDebug ? "PHP(ref-2.0)" : "PHP-2.0");
1117  }
1118  else {
1119  INTERESTING(lDebug ? "PHP(ref)" : "PHP");
1120  }
1121  lmem[_mPHP] = 1;
1122  }
1123  else if (!lmem[_mPHP] && URL_INFILE(_URL_PHP)) {
1124  INTERESTING(lDebug ? "PHP(url)" : "PHP");
1125  lmem[_mPHP] = 1;
1126  }
1127  else if (INFILE(_LT_PHP_ref)) {
1128  INTERESTING(lDebug ? "PHP(2)" : "PHP");
1129  lmem[_mPHP] = 1;
1130  }
1132  /*
1133  * Licenses between here and all the GPL/LGPL/GFDL/FSF checks (below) MUST
1134  * be tested PRIOR to checking GPL/FSF and friends
1135  */
1136  if ((INFILE(_CR_EASYSW) || INFILE(_TITLE_CUPS)) && INFILE(_LT_CUPS)) {
1137  if (INFILE(_LT_CUPS_COMMERCIAL)) {
1138  INTERESTING("CUPS-EULA");
1139  }
1140  else {
1141  INTERESTING("CUPS");
1142  }
1143  lmem[_mCUPS] = 1;
1144  }
1146  if (INFILE(_LT_HACKTIVISMO)) {
1147  INTERESTING("Hacktivismo");
1148  lmem[_mGPL] = 1; /* don't look for GPL references */
1149  }
1151  if (INFILE(_LT_NESSUS) && INFILE(_TITLE_NESSUS)) {
1152  INTERESTING("NESSUS-EULA");
1153  lmem[_mLGPL] = 1; /* don't look for LGPL references */
1154  lmem[_mGPL] = 1;
1155  }
1157  /*
1158  * Oracle
1159  */
1160  if (INFILE(_LT_ORACLE_PROTO) && INFILE(_TITLE_ORACLE_PROTO)) {
1161  INTERESTING(lDebug ? "Oracle(proto)" : "Oracle-EULA");
1162  lmem[_mGPL] = 1;
1163  }
1164  else if (INFILE(_LT_ORACLE_DEVEL) && INFILE(_TITLE_ORACLE_DEVEL)) {
1165  INTERESTING(lDebug ? "Oracle(dev)" : "Oracle-Dev");
1166  }
1167  else if (URL_INFILE(_URL_ORACLE_BERKELEY_DB)) {
1168  INTERESTING(lDebug ? "URL_ORACLE_BERKELEY_DB" : "Oracle-Berkeley-DB");
1169  }
1171  /*
1172  * CeCILL
1173  * According to digikam-0.9.4/digikam/libs/greycstoration/CImg.h:
1174  * The CeCILL-C (C_V1) license is close to the GNU LGPL
1175  * The CeCILL (V2.0) license is compatible with the GNU GPL
1176  */
1177  if (INFILE(_TITLE_CECILL_V11_2) || INFILE(_SPDX_CECILL_11)) {
1178  INTERESTING(lDebug ? "CeCILL_v1.1(#2)" : "CECILL-1.1");
1179  lmem[_mGPL] = lmem[_mLGPL] = 1;
1180  }
1181  else if (INFILE(_TITLE_CECILL_B) || INFILE(_TITLE_CECILL_B1) || INFILE(_SPDX_CECILL_B)) {
1182  INTERESTING("CECILL-B");
1183  }
1184  else if (INFILE(_TITLE_CECILL_C) || INFILE(_TITLE_CECILL_C1) || INFILE(_SPDX_CECILL_C)) {
1185  INTERESTING("CECILL-C");
1186  }
1187  else if (INFILE(_LT_CECILL_DUALref)) {
1188  INTERESTING("CECILL(dual)");
1189  lmem[_mGPL] = lmem[_mLGPL] = 1;
1190  }
1191  else if (INFILE(_SPDX_CECILL_10)) {
1192  INTERESTING("CECILL-1.0");
1193  }
1194  else if (INFILE(_SPDX_CECILL_21)) {
1195  INTERESTING("CECILL-2.1");
1196  }
1197  else if (INFILE(_LT_CECILL_2_ref) || INFILE(_SPDX_CECILL_20)) {
1198  INTERESTING("CECILL-2.0");
1199  }
1200  else if (INFILE(_LT_CECILL_ref2)) {
1201  INTERESTING("CECILL");
1202  }
1203  else if (INFILE(_LT_CECILL_B_ref)) {
1204  INTERESTING("CECILL-B");
1205  }
1206  else if (INFILE(_LT_CECILL_ref) || INFILE(_LT_CECILL_ref1)) {
1207  if (URL_INFILE(_URL_CECILL_C_V11)) {
1208  INTERESTING(lDebug ? "CeCILL_v1.1(url)" : "CECILL-1.1");
1209  }
1210  else if (URL_INFILE(_URL_CECILL_C_V1)) {
1211  INTERESTING(lDebug ? "CeCILL_v1(url)" : "CECILL-1.0");
1212  }
1213  else if (URL_INFILE(_URL_CECILL_V2)) {
1214  INTERESTING(lDebug ? "CeCILL_v2(url)" : "CECILL-2.0");
1215  }
1216  else if (URL_INFILE(_URL_CECILL)) {
1217  INTERESTING(lDebug ? "CeCILL(url)" : "CECILL");
1218  }
1219  else {
1220  INTERESTING(lDebug ? "CeCILL(#3)" : "CECILL");
1221  }
1222  lmem[_mGPL] = 1;
1223  }
1224  else if (INFILE(_LT_CECILL_1)) {
1225  if (INFILE(_TITLE_CECILL_V10)) {
1226  INTERESTING(lDebug ? "CeCILL_v1.0(#1)" : "CECILL-1.0");
1227  }
1228  else if (INFILE(_TITLE_CECILL_V20)) {
1229  INTERESTING(lDebug ? "CeCILL_v2.0(#1)" : "CECILL-2.0");
1230  }
1231  lmem[_mGPL] = 1;
1232  }
1233  else if (INFILE(_LT_CECILL_2) || INFILE(_TITLE_CECILL1) || INFILE(_TITLE_CECILL2)) {
1234  if (INFILE(_TITLE_CECILL_V10)) {
1235  INTERESTING(lDebug ? "CeCILL_v1.0(#2)" : "CECILL-1.0");
1236  }
1237  else if (INFILE(_TITLE_CECILL_V11)) {
1238  INTERESTING(lDebug ? "CeCILL_v1.1(#1)" : "CECILL-1.1");
1239  }
1240  else if (INFILE(_TITLE_CECILL_V20)) {
1241  INTERESTING(lDebug ? "CeCILL_v2.0(#2)" : "CECILL-2.0");
1242  }
1243  else {
1244  INTERESTING(lDebug ? "CeCILL(#2)" : "CECILL");
1245  }
1246  lmem[_mGPL] = 1;
1247  }
1249  /*
1250  * Monash University
1251  */
1252  if (INFILE(_CR_UMONASH) && INFILE(_LT_UMONASH)) {
1253  INTERESTING("U-Monash");
1254  if (INFILE(_PHR_GPL_NO_MORE)) {
1255  lmem[_mGPL] = 1;
1256  }
1257  }
1259  /* Open Font License */
1260  if (INFILE(_LT_OPEN_FONT_V10) || INFILE(_LT_OPEN_FONT_V10_1))
1261  {
1262  INTERESTING("OFL-1.0");
1263  lmem[_fOFL] = 1;
1264  }
1265  else if (INFILE(_SPDX_OFL_10_no_RFN)) {
1266  INTERESTING("OFL-1.0-no-RFN");
1267  }
1268  else if (INFILE(_SPDX_OFL_10_RFN)) {
1269  INTERESTING("OFL-1.0-RFN");
1270  }
1271  else if (INFILE(_SPDX_OFL_10)) {
1272  INTERESTING("OFL-1.0");
1273  }
1274  else if (INFILE(_PHR_OPEN_FONT_V10_1) || INFILE(_PHR_OPEN_FONT_V10_2))
1275  {
1276  INTERESTING("OFL-1.0");
1277  lmem[_fOFL] = 1;
1278  }
1279  else if (INFILE(_LT_OPEN_FONT_V11) || INFILE(_LT_OPEN_FONT_V11_1))
1280  {
1281  INTERESTING("OFL-1.1");
1282  lmem[_fOFL] = 1;
1283  }
1284  else if (INFILE(_SPDX_OFL_11_no_RFN)) {
1285  INTERESTING("OFL-1.1-no-RFN");
1286  }
1287  else if (INFILE(_SPDX_OFL_11_RFN)) {
1288  INTERESTING("OFL-1.1-RFN");
1289  }
1290  else if (INFILE(_SPDX_OFL_11)) {
1291  INTERESTING("OFL-1.1");
1292  }
1293  else if (INFILE(_PHR_OPEN_FONT_V11_1) || INFILE(_PHR_OPEN_FONT_V11_2))
1294  {
1295  INTERESTING("OFL-1.1");
1296  lmem[_fOFL] = 1;
1297  }
1299  /* Simple Public License 2.0 */
1300  if (INFILE(_TITLE_SimPL_V2)) {
1301  INTERESTING("SimPL-2.0");
1302  lmem[_mGPL] = 1;
1303  }
1305  /* Leptonica license */
1306  if (INFILE(_TITLE_LEPTONICA) && INFILE(_LT_GNU_3)) {
1307  INTERESTING("Leptonica");
1308  }
1310  /* copyleft-next license
1311  * It has to be checked before GPL because the license has the reference
1312  * to GPL license which gives a false positive GPL finding.
1313  */
1314  if (INFILE(_TITLE_copyleft_next_030) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1315  INTERESTING("copyleft-next-0.3.0");
1316  lmem[_mGPL] = 1;
1317  }
1318  else if (INFILE(_TITLE_copyleft_next_031) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1319  INTERESTING("copyleft-next-0.3.1");
1320  lmem[_mGPL] = 1;
1321  }
1322  else if (INFILE(_PHR_copyleft_next_030) || INFILE(_SPDX_copyleft_next_030)) {
1323  INTERESTING("copyleft-next-0.3.0");
1324  }
1325  else if (INFILE(_PHR_copyleft_next_031) || INFILE(_SPDX_copyleft_next_031)) {
1326  INTERESTING("copyleft-next-0.3.1");
1327  }
1329  /*
1330  * GPL, LGPL, GFDL
1331  * QUESTION: do we need to check for the FSF copyright since we also
1332  * check for "GNU" or "free"?
1333  */
1334  if ((NOT_INFILE(_LT_FORMER_GNU) && (mCR_FSF() ||
1335  HASTEXT(_TEXT_GNUTERMS, REG_EXTENDED)))) {
1336  /*
1337  * Affero
1338  */
1339  if (INFILE(_PHR_AGPL) && NOT_INFILE(_LT_GPL3ref4)) {
1340  if (INFILE(_LT_AGPL1) || INFILE(_LT_AGPL2) ||
1341  INFILE(_LT_AGPL3)) {
1342  cp = AGPLVERS();
1343  INTERESTING(lDebug ? "Affero(#1)" : cp);
1344  lmem[_mGPL] = 1;
1345  }
1346  else if (INFILE(_LT_AGPLref1)) {
1347  cp = AGPLVERS();
1348  INTERESTING(lDebug ? "Affero(#2)" : cp);
1349  lmem[_mGPL] = 1;
1350  }
1351  else if (INFILE(_LT_AGPLref2) && NOT_INFILE(_LT_NOT_AGPLref1)) {
1352  cp = AGPLVERS();
1353  INTERESTING(lDebug ? "Affero(#3)" : cp);
1354  lmem[_mGPL] = 1;
1355  }
1356  else if (mCR_FSF() && NOT_INFILE(_LT_GPL3_NOT_AGPL)) {
1357  cp = AGPLVERS();
1358  INTERESTING(lDebug ? "Affero(CR)" : cp);
1359  lmem[_mGPL] = 1;
1360  }
1361  }
1362  else if (INFILE(_LT_AGPL_NAMED)) {
1363  cp = AGPLVERS();
1364  INTERESTING(lDebug ? "AGPL(named)" : cp);
1365  lmem[_mGPL] = 1;
1366  }
1367 
1368  /*
1369  * Some packages have a single file containing both a GPL and an LGPL
1370  * license. Therefore, these checks should NOT be exclusive.
1371  */
1372  /* * The Nethack General Public License (NGPL) */
1373  else if (INFILE(_TITLE_NGPL)) {
1374  INTERESTING("NGPL");
1375  lmem[_mGPL] = 1;
1376  }
1377  else if (INFILE(_LT_GPL_V1)) {
1378  INTERESTING("GPL-1.0-only");
1379  lmem[_mGPL] = 1;
1380  }
1381  else if (INFILE(_LT_GPL_1) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1382  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1383  {
1384  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#1)" : "GPL-2.0-or-later");
1385  lmem[_mGPL] = 1;
1386  }
1387  else if (INFILE(_TITLE_GPL2)) {
1388  INTERESTING(lDebug ? "Title(GPL-2.0-only)" : "GPL-2.0-only");
1389  lmem[_mGPL] = 1;
1390  }
1391  else if (INFILE(_PHR_GPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1392  {
1393  INTERESTING("GPL-1.0-or-later");
1394  lmem[_mGPL] = 1;
1395  }
1396  else if (INFILE(_TITLE_GPL1)) {
1397  INTERESTING("GPL-1.0-only");
1398  lmem[_mGPL] = 1;
1399  }
1400  else {
1401  INTERESTING("GPL");
1402  lmem[_mGPL] = 1;
1403  }
1404  }
1405  else if ((INFILE(_LT_GPL_V2) || INFILE(_LT_GPL_V2_ref) || INFILE(_LT_GPL_V2_ref1) || INFILE(_LT_GPL_V2_ref2)) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1406  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1407  {
1408  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1409  lmem[_mGPL] = 1;
1410  }
1411  else {
1412  INTERESTING(lDebug ? "LT(GPL-V2)" : "GPL-2.0-only");
1413  lmem[_mGPL] = 1;
1414  }
1415  }
1416  else if (INFILE(_PHR_GPL2_OR_LATER_2))
1417  {
1418  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1419  lmem[_mGPL] = 1;
1420  }
1421  else if (INFILE(_LT_GPL3_PATENTS)) {
1422  if (INFILE(_TITLE_GPL3)) {
1423  INTERESTING(lDebug ? "GPL_v3(#1)" : "GPL-3.0-only");
1424  lmem[_mGPL] = 1;
1425  }
1426  else {
1427  INTERESTING("GPL-3.0-only-possibility");
1428  lmem[_mGPL] = 1;
1429  }
1430  }
1431  else if (INFILE(_TITLE_GPL3_ref3_later)) {
1432  INTERESTING("GPL-3.0-or-later");
1433  lmem[_mGPL] = 1;
1434  }
1435  else if (INFILE(_TITLE_GPL3_ref4_later)) {
1436  INTERESTING("GPL-3.0-or-later");
1437  lmem[_mGPL] = 1;
1438  }
1439  else if (INFILE(_TITLE_GPL3_ref3)) {
1440  INTERESTING("GPL-3.0-only");
1441  lmem[_mGPL] = 1;
1442  }
1443  if (INFILE(_LT_LGPL_1) || INFILE(_LT_LGPL_2) || INFILE(_LT_LGPL21_OR_LATER_GENERAL)) {
1444  if (INFILE(_PHR_LGPL21_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1445  {
1446  INTERESTING("LGPL-2.1-or-later");
1447  lmem[_mLGPL] = 1;
1448  }
1449  else if (INFILE(_PHR_LGPL2_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1450  {
1451  INTERESTING("LGPL-2.0-or-later");
1452  lmem[_mLGPL] = 1;
1453  }
1454  else if (INFILE(_TITLE_LGPLV21)) {
1455  INTERESTING("LGPL-2.1-only");
1456  lmem[_mLGPL] = 1;
1457  }
1458  else if (INFILE(_TITLE_LGPLV2)) {
1459  INTERESTING("LGPL-2.0-only");
1460  lmem[_mLGPL] = 1;
1461  }
1462  else {
1463  INTERESTING("LGPL");
1464  lmem[_mLGPL] = 1;
1465  }
1466  }
1467  else if (INFILE(_LT_LGPL_3)) {
1468  if ((INFILE(_PHR_LGPL3_OR_LATER)
1469  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
1470  || INFILE(_PHR_LGPL3_OR_LATER_ref2))
1471  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1472  {
1473  INTERESTING("LGPL-3.0-or-later");
1474  lmem[_mLGPL] = 1;
1475  }
1476  else if (INFILE(_TITLE_LGPL3)) {
1477  INTERESTING("LGPL-3.0-only");
1478  lmem[_mLGPL] = 1;
1479  }
1480  else {
1481  INTERESTING("LGPL-3.0-only-possibility");
1482  lmem[_mLGPL] = 1;
1483  }
1484  }
1485  if (INFILE(_LT_GFDL)) {
1486  cp = GFDLVERS();
1487  INTERESTING(lDebug ? "GFDL(#1)" : cp);
1488  lmem[_mGFDL] = 1;
1489  }
1490  if (!lmem[_mLGPL] && NOT_INFILE(_LT_MPL_SECONDARY)) { /* no FSF/GPL-like match yet */
1491  /*
1492  NOTE: search for LGPL before GPL; the latter matches
1493  occurrences of former
1494  */
1495  if (INFILE(_LT_GPL_FONT1) && INFILE(_LT_GPL_FONT2)) {
1496  INTERESTING(lDebug ? "GPL(fonts)" : "GPL-exception");
1497  lmem[_mGPL] = 1;
1498  }
1499  else if (INFILE(_LT_LGPL_ALT)) {
1500  cp = LGPLVERS();
1501  INTERESTING(lDebug ? "LGPL(alternate)" : cp);
1502  lmem[_mLGPL] = 1;
1503  }
1504  else if (INFILE(_LT_LGPL3_ref_later)) {
1505  INTERESTING("LGPL-3.0-or-later");
1506  lmem[_mLGPL] = 1;
1507  }
1508  else if (INFILE(_LT_LGPLref1)) {
1509  cp = LGPLVERS();
1510  INTERESTING(lDebug ? "LGPL(ref1)" : cp);
1511  lmem[_mLGPL] = 1;
1512  }
1513  else if (INFILE(_LT_LGPLref2) &&
1514  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1515  cp = LGPLVERS();
1516  INTERESTING(lDebug ? "LGPL(ref2#1)" : cp);
1517  lmem[_mLGPL] = 1;
1518  }
1519  else if (INFILE(_LT_LGPLref3)) {
1520  cp = LGPLVERS();
1521  INTERESTING(lDebug ? "LGPL(ref3)" : cp);
1522  lmem[_mLGPL] = 1;
1523  }
1524  else if (INFILE(_LT_LGPLref4)) {
1525  cp = LGPLVERS();
1526  INTERESTING(lDebug ? "LGPL(ref4)" : cp);
1527  lmem[_mLGPL] = 1;
1528  }
1529  else if (INFILE(_LT_LGPLref5)) {
1530  cp = LGPLVERS();
1531  INTERESTING(lDebug ? "LGPL(ref5)" : cp);
1532  lmem[_mLGPL] = 1;
1533  }
1534  else if (INFILE(_LT_LGPLref6)) {
1535  cp = LGPLVERS();
1536  INTERESTING(lDebug ? "LGPL(ref6)" : cp);
1537  lmem[_mLGPL] = 1;
1538  }
1539  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
1540  INFILE(_LT_LGPLref7) &&
1541  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1542  cp = LGPLVERS();
1543  INTERESTING(lDebug ? "LGPL(ref7)" : cp);
1544  lmem[_mLGPL] = 1;
1545  }
1546  else if (!lmem[_fREAL] && !lmem[_mAPTANA] &&
1547  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_LGPLref8) &&
1548  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1549  cp = LGPLVERS();
1550  INTERESTING(lDebug ? "LGPL(ref8)" : cp);
1551  lmem[_mLGPL] = 1;
1552  }
1553  else if (INFILE(_LT_LGPLref9) &&
1554  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1555  cp = LGPLVERS();
1556  INTERESTING(lDebug ? "LGPL(ref9)" : cp);
1557  lmem[_mLGPL] = 1;
1558  }
1559  else if (INFILE(_LT_LGPLref10) &&
1560  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1561  cp = LGPLVERS();
1562  INTERESTING(lDebug ? "LGPL(ref10)" : cp);
1563  lmem[_mLGPL] = 1;
1564  }
1565  else if (INFILE(_LT_LGPLref11)) {
1566  cp = LGPLVERS();
1567  INTERESTING(lDebug ? "LGPL(ref11)" : cp);
1568  lmem[_mLGPL] = 1;
1569  }
1570  else if (INFILE(_FILE_LGPL1) || INFILE(_FILE_LGPL2)) {
1571  cp = LGPLVERS();
1572  INTERESTING(lDebug ? "LGPL(deb)" : cp);
1573  lmem[_mLGPL] = 1;
1574  }
1575  else if (!LVAL(_TEXT_GNU_LIC_INFO) &&
1576  (URL_INFILE(_URL_LGPL_1) ||
1577  URL_INFILE(_URL_LGPL_2))) {
1578  cp = LGPLVERS();
1579  INTERESTING(lDebug ? "LGPL(url)" : cp);
1580  lmem[_mLGPL] = 1;
1581  }
1582  else if (lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
1583  GPL_INFILE(_LT_LGPL_OR)) {
1584  cp = LGPLVERS();
1585  INTERESTING(lDebug ? "LGPL(or)" : cp);
1586  lmem[_mLGPL] = 1;
1587  }
1588  else if (INFILE(_PHR_LGPL21_OR_LATER_2)) {
1589  INTERESTING(lDebug ? "LGPL-2.1-or-later(_LATER_2)" : "LGPL-2.1-or-later");
1590  lmem[_mLGPL] = 1;
1591  }
1592  else if (INFILE(_PHR_LGPL21_ONLY_ref) || INFILE(_TITLE_LGPLV21_2)) {
1593  INTERESTING("LGPL-2.1-only");
1594  lmem[_mLGPL] = 1;
1595  }
1596  }
1597  if (!lmem[_mGPL] && !HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
1598  if (GPL_INFILE(_LT_GPL_ALT) && !INFILE(_LT_LGPL_ALT)) {
1599  cp = GPLVERS();
1600  INTERESTING(lDebug ? "GPL(alternate)" : cp);
1601  lmem[_mGPL] = 1;
1602  }
1603  else if ((GPL_INFILE(_LT_GPL3ref2) || GPL_INFILE(_PHR_GPL3_OR_LATER)
1604  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1) || GPL_INFILE(_PHR_GPL3_OR_LATER_ref2))
1605  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1606  {
1607  INTERESTING("GPL-3.0-or-later");
1608  lmem[_mGPL] = 1;
1609  }
1610  else if (GPL_INFILE(_LT_GPL3ref)) {
1611  INTERESTING(lDebug ? "GPL_v3(#2)" : "GPL-3.0-only");
1612  lmem[_mGPL] = 1;
1613  }
1614  else if (GPL_INFILE(_LT_GPL3ref3) && NOT_INFILE(_TITLE_LGPL3)) {
1615  INTERESTING("GPL-3.0-only");
1616  lmem[_mGPL] = 1;
1617  }
1618  else if (!lmem[_mLIBRE] && GPL_INFILE(_LT_GPLref1)
1619  && NOT_INFILE(_PHR_NOT_UNDER_GPL)
1620  && NOT_INFILE(_LT_LGPLref2)
1621  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1622  /*
1623  * Special exceptions:
1624  * (1) LaTeX uses the following phrase:
1625  * "... why distributing LaTeX under the GNU General Public License (GPL)
1626  * was considered inappropriate".
1627  * (2) Python uses the following phrases:
1628  * "GPL-compatible doesn't mean that we're distributing Python under the GPL"
1629  * AND, "GPL-compatible licenses make it possible to combine Python with
1630  * other software that is released under the GPL.
1631  *****
1632  * These MUST be filtered. Do so by marking the GPL flag but don't assign
1633  * a license component (e.g., ignore GPL for this file)
1634  */
1635  if (INFILE(_PHR_LATEX_GPL_INAPPROPRIATE) ||
1636  INFILE(_PHR_PYTHON_NOTGPL_1) ||
1637  INFILE(_PHR_PYTHON_NOTGPL_2)) {
1638  lmem[_mGPL] = 1;
1639  }
1640  else if (!HASTEXT(_TEXT_GCC, REG_EXTENDED)
1641  && NOT_INFILE(_TITLE_D_FSL_10)){
1642  cp = GPLVERS();
1643  INTERESTING(cp);
1644  lmem[_mGPL] = 1;
1645  }
1646  }
1647  else if (INFILE(_LT_GPL_FSF)) {
1648  cp = GPLVERS();
1649  INTERESTING(lDebug ? "GPL(FSF)" : cp);
1650  lmem[_mGPL] = 1;
1651  }
1652  else if (GPL_INFILE(_LT_GPLref2)) {
1653  cp = GPLVERS();
1654  INTERESTING(lDebug ? "GPL(ref2)" : cp);
1655  lmem[_mGPL] = 1;
1656  }
1657  else if (GPL_INFILE(_LT_GPLref3)) {
1658  cp = GPLVERS();
1659  INTERESTING(lDebug ? "GPL(ref3)" : cp);
1660  lmem[_mGPL] = 1;
1661  }
1662  else if (INFILE(_LT_GPLref4)) {
1663  cp = GPLVERS();
1664  INTERESTING(lDebug ? "GPL(ref4)" : cp);
1665  lmem[_mGPL] = 1;
1666  }
1667  else if (GPL_INFILE(_LT_GPLref5)) {
1668  cp = GPLVERS();
1669  INTERESTING(lDebug ? "GPL(ref5)" : cp);
1670  lmem[_mGPL] = 1;
1671  }
1672  else if (GPL_INFILE(_LT_GPLref6)) {
1673  cp = GPLVERS();
1674  INTERESTING(lDebug ? "GPL(ref6)" : cp);
1675  lmem[_mGPL] = 1;
1676  }
1677  else if (GPL_INFILE(_LT_GPLref7)) {
1678  cp = GPLVERS();
1679  INTERESTING(lDebug ? "GPL(ref7)" : cp);
1680  lmem[_mGPL] = 1;
1681  }
1682  else if (GPL_INFILE(_LT_GPLref8)) {
1683  cp = GPLVERS();
1684  INTERESTING(lDebug ? "GPL(ref8)" : cp);
1685  lmem[_mGPL] = 1;
1686  }
1687  else if (INFILE(_LT_GPLref9)) {
1688  cp = GPLVERS();
1689  INTERESTING(lDebug ? "GPL(ref9)" : cp);
1690  lmem[_mGPL] = 1;
1691  }
1692  else if (GPL_INFILE(_LT_GPLref10)) {
1693  cp = GPLVERS();
1694  INTERESTING(lDebug ? "GPL(ref10)" : cp);
1695  lmem[_mGPL] = 1;
1696  }
1697  else if (INFILE(_LT_GPLref11)) {
1698  cp = GPLVERS();
1699  INTERESTING(lDebug ? "GPL(ref11)" : cp);
1700  lmem[_mGPL] = 1;
1701  }
1702  else if (INFILE(_LT_GPLref12)) {
1703  cp = GPLVERS();
1704  INTERESTING(lDebug ? "GPL(ref12)" : cp);
1705  lmem[_mGPL] = 1;
1706  }
1707  else if (GPL_INFILE(_LT_GPLref13)) {
1708  cp = GPLVERS();
1709  INTERESTING(lDebug ? "GPL(ref13)" : cp);
1710  lmem[_mGPL] = 1;
1711  }
1712  else if (GPL_INFILE(_LT_GPLref14) &&
1713  NOT_INFILE(_LT_LGPLref2)) {
1714  cp = GPLVERS();
1715  INTERESTING(lDebug ? "GPL(ref14)" : cp);
1716  lmem[_mGPL] = 1;
1717  }
1718  else if (INFILE(_LT_GPLref16)) {
1719  cp = GPLVERS();
1720  INTERESTING(lDebug ? "GPL(ref16)" : cp);
1721  lmem[_mGPL] = 1;
1722  }
1723  else if (INFILE(_LT_GPLref18)) {
1724  cp = GPLVERS();
1725  INTERESTING(lDebug ? "GPL(ref18)" : cp);
1726  lmem[_mGPL] = 1;
1727  }
1728  else if (INFILE(_LT_GPLref19)) {
1729  cp = GPLVERS();
1730  INTERESTING(lDebug ? "GPL(ref19)" : cp);
1731  lmem[_mGPL] = 1;
1732  }
1733  else if (INFILE(_LT_GPLref20)) {
1734  cp = GPLVERS();
1735  INTERESTING(lDebug ? "GPL(ref20)" : cp);
1736  lmem[_mGPL] = 1;
1737  }
1738  else if (!LVAL(_TEXT_GNU_LIC_INFO) && NOT_INFILE(_LT_INTEL_7) &&
1739  (URL_INFILE(_URL_GPL_1) ||
1740  URL_INFILE(_URL_GPL_2) ||
1741  URL_INFILE(_URL_GPL_3))) {
1742  cp = GPLVERS();
1743  INTERESTING(lDebug ? "GPL(url)" : cp);
1744  lmem[_mGPL] = 1;
1745  }
1746  else if (URL_INFILE(_URL_AGPL)) {
1747  cp = AGPLVERS();
1748  INTERESTING(lDebug ? "Affero(url)" : cp);
1749  lmem[_mGPL] = 1;
1750  }
1751  else if (!ltsr[_LT_LGPL_3] && INFILE(_LT_GPL_OR)) {
1752  cp = GPLVERS();
1753  INTERESTING(lDebug ? "GPL(or)" : cp);
1754  lmem[_mGPL] = 1;
1755  }
1756  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1757  (INFILE(_LT_GNU_1) + INFILE(_LT_GNU_2) +
1758  INFILE(_LT_GNU_3) + INFILE(_LT_GNU_4) > 2)) {
1759  cp = GPLVERS();
1760  INTERESTING(lDebug ? "GPL(GNU)" : cp);
1761  lmem[_mGPL] = 1;
1762  }
1763  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1764  INFILE(_LT_SEE_GPL) && INFILE(_LT_RECV_GPL)) {
1765  cp = GPLVERS();
1766  INTERESTING(lDebug ? "GPL(see)" : cp);
1767  lmem[_mGPL] = 1;
1768  }
1769  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1770  INFILE(_LT_SEE_LGPL) && INFILE(_LT_RECV_LGPL)) {
1771  cp = LGPLVERS();
1772  INTERESTING(lDebug ? "LGPL(see)" : cp);
1773  lmem[_mLGPL] = 1;
1774  }
1775  }
1776  if (!lmem[_mGFDL] && (INFILE(_LT_GFDLref1) ||
1777  INFILE(_TITLE_GFDL))) {
1778  cp = GFDLVERS();
1779  INTERESTING(lDebug ? "GFDL(#2)" : cp);
1780  lmem[_mGFDL] = 1;
1781  }
1782  /*
1783  * Listed _explictly_ as an exception to the GPL -- this is NOT an 'else'
1784  * clause!
1785  */
1786  if (!lmem[_mGPL] && INFILE(_PHR_GPL_DESCRIPTIONS)) {
1787  INTERESTING(lDebug ? "GPL-kinda" : "GPL");
1788  lmem[_mGPL] = 1;
1789  }
1790  /* checking for FSF */
1791  if (INFILE(_LT_FSF_1)) {
1792  INTERESTING(lDebug ? "FSF(1)" : "FSFULLR");
1793  lmem[_mLGPL] = 1;
1794  }
1795  else if (INFILE(_LT_FSF_2)) {
1796  INTERESTING(lDebug ? "FSF(2)" : "FSF");
1797  }
1798  else if (INFILE(_LT_FSF_3)) {
1799  INTERESTING(lDebug ? "FSF(3)" : "FSF");
1800  }
1801  else if (mCR_FSF() && INFILE(_LT_FSF_4)) {
1802  INTERESTING(lDebug ? "FSF(4)" : "FSF");
1803  }
1804  else if (!lmem[_mGPL] && mCR_FSF() && INFILE(_LT_FSF_5)) {
1805  INTERESTING(lDebug ? "FSF(5)" : "FSF");
1806  }
1807  else if (!lmem[_mGPL] && INFILE(_LT_FSFUL)) {
1808  INTERESTING("FSFUL");
1809  }
1810  else if (!lmem[_mGPL] && NOT_INFILE(_LT_Autoconf_exception_20) && INFILE(_LT_FSFref1)) {
1811  INTERESTING(lDebug ? "FSF(ref1)" : "FSF");
1812  }
1813  else if (INFILE(_LT_FSFref2)) {
1814  INTERESTING(lDebug ? "FSF(ref2)" : "FSF");
1815  }
1816  else if (INFILE(_LT_LGPLrefFSF) &&
1817  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1818  INTERESTING(lDebug ? "LGPL(FSF)" : "LGPL");
1819  lmem[_mLGPL] = 1;
1820  }
1821  if (!lmem[_mGPL] && !lmem[_mLGPL] && !lmem[_mGFDL]) {
1822  /*
1823  * Check these patterns AFTER checking for FSF and GFDL, and only if the
1824  * CUPS license isn't present.
1825  */
1826  if (!lmem[_mCUPS] ) {
1827  if (GPL_INFILE(_LT_GPLpatt1) &&
1828  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1829  cp = GPLVERS();
1830  INTERESTING(lDebug ? "GPL(patt1)" : cp);
1831  lmem[_mGPL] = 1;
1832  }
1833  else if (GPL_INFILE(_LT_GPLpatt2)) {
1834  cp = GPLVERS();
1835  INTERESTING(lDebug ? "GPL(patt2)" : cp);
1836  lmem[_mGPL] = 1;
1837  }
1838  else if (INFILE(_CR_rms) && INFILE(_LT_GPL_2)) {
1839  INTERESTING("GPL(rms)");
1840  lmem[_mGPL] = 1;
1841  }
1842  else if (INFILE(_PHR_GPLISH_SAMPLE)) {
1843  INTERESTING(lDebug ? "GPLISH" : "GPL-possibility");
1844  INTERESTING(lDebug ? "GPLISH" : "LGPL-possibility");
1845  lmem[_mLGPL] = lmem[_mGPL] = 1;
1846  }
1847  }
1848  }
1849  else if (INFILE(_LT_GNU_COPYLEFT)) {
1850  INTERESTING("GNU-copyleft");
1851  lmem[_fGPL] = 1;
1852  }
1853  lmem[_fGPL] = lmem[_mLGPL]+lmem[_mGPL]+lmem[_mGFDL];
1854  }
1856  if (!lmem[_mGPL] && INFILE(_LT_GNU_PROJECTS)) {
1857  cp = GPLVERS();
1858  INTERESTING(lDebug ? "GPL(proj)" : cp);
1859  lmem[_mGPL] = 1;
1860  }
1862  if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || HASTEXT(_TITLE_GPL2_ref1_later, REG_EXTENDED))
1863  {
1864  INTERESTING(lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later");
1865  lmem[_mGPL] = 1;
1866  }
1867  else if (INFILE(_LT_TAPJOY) || INFILE(_LT_TAPJOY_ref1)) {
1868  INTERESTING("Tapjoy");
1869  lmem[_fGPL] = 1;
1870  lmem[_mMIT] = 1;
1871  }
1872  else if (!lmem[_mGPL] && !lmem[_mGFDL] && !lmem[_mLGPL] && !lmem[_fZPL]
1873  && (INFILE(_LT_GPL_NAMED)
1874  || INFILE(_LT_GPL_NAMED2)
1875  || HASTEXT(_LT_GPL_NAMED3, REG_EXTENDED))
1876  && !HASTEXT(_PHR_GPL_GHOSTSCRIPT, REG_EXTENDED)
1877  && NOT_INFILE(_LT_MPL_SECONDARY)
1878  && NOT_INFILE(_TEXT_NOT_GPL)
1879  && NOT_INFILE(_TEXT_NOT_GPL2)
1880  && NOT_INFILE(_LT_CNRI_PYTHON_GPL)
1881  && NOT_INFILE(_LT_W3Cref4)
1882  && NOT_INFILE(_LT_GPL_NAMED3_EXHIBIT)
1883  && NOT_INFILE(_LT_GPL_NAMED_COMPATIBLE)
1884  && !HASTEXT(_LT_GPL_NAMED_COMPATIBLE_1, REG_EXTENDED)
1885  && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1886  && NOT_INFILE(_TITLE_D_FSL_10)
1887  && NOT_INFILE(_LT_INTEL_7)
1888  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1889  cp = GPLVERS();
1890  INTERESTING(lDebug ? "GPL(named)" : cp);
1891  lmem[_mGPL] = 1;
1892  }
1893  else if ( !lmem[_mGPL] && !INFILE(_TITLE_MIROS) && (INFILE(_LT_GPL_V2_NAMED) || INFILE(_LT_GPL_V2_NAMED_ref1)))
1894  {
1895  INTERESTING(lDebug ? "GPLV2(named)" : "GPL-2.0-only");
1896  lmem[_mGPL] = 1;
1897  }
1898  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED_later))
1899  {
1900  INTERESTING(lDebug ? "GPLV3(named_later)" : "GPL-3.0-or-later");
1901  }
1902  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED))
1903  {
1904  INTERESTING(lDebug ? "GPLV3(named)" : "GPL-3.0-only");
1905  }
1907  if (!lmem[_mLGPL] && (INFILE(_LT_LGPL_NAMED)
1908  || INFILE(_LT_LGPL_NAMED2)) && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1909  && NOT_INFILE(_LT_PHP_V30_2)) {
1910  cp = LGPLVERS();
1911  INTERESTING(lDebug ? "LGPL(named)" : cp);
1912  }
1913 
1915  /*
1916  * MIT, X11, Open Group, NEC -- text is very long, search in 2 parts
1917  */
1918  if (INFILE(_LT_JSON) && INFILE(_LT_MIT_NO_EVIL)) { // JSON license
1919  INTERESTING("JSON");
1920  lmem[_mMIT] = 1;
1921  }
1923  if (!lmem[_mWORDNET] && INFILE(_TITLE_WORDNET))
1924  {
1925  INTERESTING("WordNet-3.0");
1926  }
1928  if (INFILE(_CR_XFREE86_V10) || INFILE(_LT_XFREE86_V10)) {
1929  INTERESTING("XFree86-1.0");
1930  lmem[_mMIT] = 1;
1931  }
1932  else if (INFILE(_CR_XFREE86_V11) || INFILE(_LT_XFREE86_V11)) {
1933  INTERESTING("XFree86-1.1");
1934  lmem[_mMIT] = 1;
1935  }
1936  else if (INFILE(_LT_XFREE86)) {
1937  INTERESTING(lDebug ? "XFree86(1)" : "XFree86");
1938  lmem[_mMIT] = 1;
1939  }
1940  else if (HASTEXT(_LT_BSD_OR_MIT, REG_EXTENDED)) {
1941  INTERESTING("MIT");
1942  INTERESTING("BSD");
1943  lmem[_mMIT] = 1;
1944  }
1945  else if (HASTEXT(_LT_BSD_AND_MIT, REG_EXTENDED)) {
1946  INTERESTING("BSD");
1947  INTERESTING("MIT");
1948  lmem[_mMIT] = 1;
1949  }
1950  /*
1951  * MIT search order changed. First MIT license explicit phrases and references are checked .
1952  */
1953  else if (!lmem[_mMIT] && NOT_INFILE(_TITLE_MIT_EXHIBIT) && NOT_INFILE(_TITLE_SGI) &&
1954  (INFILE(_LT_MIT_1) || INFILE(_TITLE_MIT))) {
1955  if(INFILE(_LT_MIT_NO_EVIL)) {
1956  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
1957  lmem[_mMIT] = 1;
1958  }
1959  else if (INFILE(_LT_MIT_2)) {
1960  if (mCR_MIT() || INFILE(_TITLE_MIT)) {
1961  INTERESTING(lDebug ? "MIT(1)" : "MIT");
1962  lmem[_mMIT] = 1;
1963  }
1964  else if (INFILE(_TITLE_XNET)) {
1965  INTERESTING("Xnet");
1966  lmem[_mMIT] = 1;
1967  }
1968  else if (INFILE(_CR_X11) || INFILE(_TITLE_X11)) {
1969  INTERESTING(lDebug ? "X11(1)" : "X11");
1970  lmem[_mMIT] = 1;
1971  }
1972  else if (INFILE(_CR_XFREE86)) {
1973  INTERESTING(lDebug ? "XFree86(2)" : "XFree86");
1974  lmem[_mMIT] = 1;
1975  }
1976  /* MIT-advertising License */
1977  else if (INFILE(_LT_MIT_ADVERTISING)) {
1978  INTERESTING("MIT-advertising");
1979  lmem[_mMIT] = 1;
1980  }
1981  /* MIT-enna License */
1982  else if (INFILE(_LT_MIT_ENNA)) {
1983  INTERESTING("MIT-enna");
1984  lmem[_mMIT] = 1;
1985  }
1986  /* MIT-feh License */
1987  else if (INFILE(_LT_MIT_FEH)) {
1988  INTERESTING("MIT-feh");
1989  lmem[_mMIT] = 1;
1990  }
1991  /* MITNFA License */
1992  else if (HASTEXT(_LT_MITNFA, 0)) {
1993  INTERESTING("MITNFA");
1994  lmem[_mMIT] = 1;
1995  }
1996  /* Imlib2 License */
1997  else if (INFILE(_LT_Imlib2)) {
1998  INTERESTING("Imlib2");
1999  lmem[_mMIT] = 1;
2000  }
2001  else if (INFILE(_LT_MIT_13)) {
2002  INTERESTING(lDebug ? "MIT(14)" : "MIT");
2003  lmem[_mMIT] = 1;
2004  }
2005  /* NCSA */
2006  else if (INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
2007  INTERESTING(lDebug ? "NCSA(1)" : "NCSA");
2008  lmem[_mMIT] = 1;
2009  lmem[_fNCSA] = 1;
2010  }
2011  else if (INFILE(_LT_MIT_0)) {
2012  INTERESTING("MIT-0");
2013  lmem[_mMIT] = 1;
2014  }
2015  else if (NOT_INFILE(_LT_INTEL_7)) {
2016  INTERESTING(lDebug ? "MIT-style(1)" : "MIT-style");
2017  lmem[_mMIT] = 1;
2018  }
2019  }
2020  else if (INFILE(_LT_BITSTREAM_1)) {
2021  INTERESTING(lDebug ? "Bitstream(1)" : "Bitstream");
2022  lmem[_mMIT] = 1;
2023  }
2024  else if (mCR_X11()) {
2025  INTERESTING(lDebug ? "X11(2)" : "X11");
2026  }
2027  else if (!lmem[_mMPL] && INFILE(_LT_MPL_1)) {
2028  cp = MPLVERS(); /* NPL, too */
2029  INTERESTING(lDebug ? "MPL/NPL#5" : cp);
2030  lmem[_mMPL] = 1;
2031  }
2032  else if (!lmem[_mMIT] && (mCR_MIT() || INFILE(_TITLE_MIT)) && NOT_INFILE(_TITLE_MIT_EXHIBIT)) {
2033  INTERESTING(lDebug ? "MIT(2)" : "MIT");
2034  lmem[_mMIT] = 1;
2035  }
2036  /*
2037  * BOOST (relatively new, circa August 2003)
2038  * hmm, some references have a Copyright Notre Dame, some don't
2039  */
2040  else if (INFILE(_LT_BOOST_1)) {
2041  if (INFILE(_TITLE_BOOST10)) {
2042  INTERESTING("BSL-1.0");
2043  }
2044  else if (INFILE(_CR_NOTREDAME)) {
2045  INTERESTING(lDebug ? "Boost(ND)" : "BSL-1.0");
2046  }
2047  else if (INFILE(_TITLE_BOOST)) {
2048  INTERESTING("BSL-1.0");
2049  }
2050  else {
2051  INTERESTING("BSL-style");
2052  }
2053  }
2054  else if (mCR_MIT()) {
2055  INTERESTING(lDebug ? "MIT(3)" : "MIT");
2056  lmem[_mMIT] = 1;
2057  }
2058  else if (INFILE(_TITLE_ICU) || HASTEXT(_URL_ICU, REG_EXTENDED)) {
2059  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2060  lmem[_mMIT] = 1;
2061  }
2062  else if (INFILE(_LT_ICU_2) && (INFILE(_CR_IBM_1) || INFILE(_CR_IBM_1))) {
2063  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2064  lmem[_mMIT] = 1;
2065  }
2066  else if (INFILE(_TITLE_JasPer_20)) {
2067  INTERESTING(lDebug ? "JasPer(title)" : "JasPer-2.0");
2068  lmem[_mMIT] = 1;
2069  }
2070  else if (INFILE(_LT_UNICODE_4)) {
2071  INTERESTING(lDebug ? "MIT-style(Unicode)" : "Unicode");
2072  lmem[_fUNICODE] = 1;
2073  lmem[_mMIT] = 1;
2074  }
2075  /*
2076  * Adobe-Glyph
2077  */
2078  else if (HASTEXT(_LT_ADOBE_GLYPH_1, REG_EXTENDED) && INFILE(_LT_ADOBE_GLYPH_2)) {
2079  INTERESTING("Adobe-Glyph");
2080  }
2081  /*
2082  * Ubuntu Font
2083  */
2084  else if (INFILE(_LT_UBUNTU_FONT)) {
2085  INTERESTING("ubuntu-font-1.0");
2086  }
2087  /*
2088  * OFL license text has MIT license warranty claims which is identifed as MIT-style
2089  */
2090  else if (!lmem[_fOFL]) {
2091  INTERESTING(lDebug ? "MIT-style(2)" : "MIT-style");
2092  lmem[_mMIT] = 1;
2093  }
2094  }
2095  /*
2096  * Secondly X11 and MIT style phrases are checked.
2097  */
2098  else if (INFILE(_LT_MIT_0) && (INFILE(_LT_MIT_2) || INFILE(_LT_MIT_3) || INFILE(_LT_MIT_4) ||
2099  INFILE(_LT_MIT_5) || INFILE(_LT_MIT_6) || INFILE(_LT_MIT_7))) {
2100  if(INFILE(_LT_MIT_NO_EVIL)) {
2101  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
2102  lmem[_mMIT] = 1;
2103  }
2104  else if (INFILE(_LT_X11_5)) {
2105  if (INFILE(_CR_XFREE86)) {
2106  INTERESTING(lDebug ? "XFree86(3)" : "XFree86");
2107  }
2108  else {
2109  INTERESTING(lDebug ? "X11(3)" : "X11");
2110  }
2111  lmem[_mMIT] = 1;
2112  }
2113  else if (INFILE(_LT_Xnet_STYLE)) {
2114  INTERESTING("Xnet");
2115  lmem[_mMIT] = 1;
2116  }
2117  else if (INFILE(_LT_TAPJOY)) {
2118  INTERESTING("Tapjoy");
2119  lmem[_mMIT] = 1;
2120  }
2121  else {
2122  /*
2123  * SPDX defines curl license. It has very typical MIT-style text. The only way to
2124  * identify it is to use copyright or copyright reference.
2125  */
2126  if (INFILE(_CR_CURL)) {
2127  INTERESTING("curl");
2128  }
2129  else {
2130  INTERESTING(lDebug ? "MIT-style(7)" : "MIT-style");
2131  }
2132  lmem[_mMIT] = 1;
2133  }
2134  }
2135  else if (INFILE(_LT_MIT_5)) {
2136  if (mCR_MIT()) {
2137  INTERESTING(lDebug ? "MIT(4)" : "MIT");
2138  }
2139  else {
2140  INTERESTING(lDebug ? "MIT-style(3)" : "MIT-style");
2141  }
2142  lmem[_mMIT] = 1;
2143  }
2145  /*
2146  * Open Group, NEC, MIT use the same text in licenses
2147  */
2148  if (INFILE(_LT_MIT_6)) {
2149  if (!lmem[_mMIT] && INFILE(_CR_OpenGroup)) {
2150  INTERESTING(lDebug ? "OpenGroup(1)" : "OpenGroup");
2151  lmem[_mMIT] = 1;
2152  }
2153  else if (!lmem[_mCMU] && mCR_CMU()) {
2154  INTERESTING(lDebug ? "CMU(2)" : "CMU");
2155  lmem[_mCMU] = 1;
2156  }
2157  else if (!lmem[_mMIT] && mCR_MIT()) {
2158  INTERESTING(lDebug ? "MIT(6)" : "MIT");
2159  lmem[_mMIT] = 1;
2160  }
2161  else if (!lmem[_mMIT] && INFILE(_LT_HPND_1) && INFILE(_LT_HPND_2)) {
2162  INTERESTING("HPND-sell-variant");
2163  lmem[_mMIT] = 1;
2164  }
2165  /*
2166  * _LT_MIT_6 is very similar to _LT_BSD_2 where MIT-CMU licenses
2167  * are also detected. Following else if is the copy from there.
2168  */
2169  else if (!lmem[_mMIT] && INFILE(_LT_CMU_7)) {
2170  if (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2) || INFILE(_CR_BSDCAL)) {
2171  INTERESTING("MIT-CMU");
2172  }
2173  else {
2174  INTERESTING("MIT-CMU-style");
2175  }
2176  lmem[_mCMU] = 1;
2177  }
2178  else if (!lmem[_mMIT]) {
2179  INTERESTING(lDebug ? "MIT-style(4)" : "MIT-style");
2180  lmem[_mMIT] = 1;
2181  }
2182  }
2183  else if (INFILE(_SPDX_MIT_0)) {
2184  INTERESTING("MIT-0");
2185  }
2186  else if (INFILE(_SPDX_MIT_advertising)) {
2187  INTERESTING("MIT-advertising");
2188  }
2189  else if (INFILE(_SPDX_MIT_enna)) {
2190  INTERESTING("MIT-enna");
2191  }
2192  else if (INFILE(_SPDX_MIT_feh)) {
2193  INTERESTING("MIT-feh");
2194  }
2195  else if (!lmem[_mMIT] && INFILE(_LT_MIT_7)) {
2196  if (INFILE(_CR_OpenGroup)) {
2197  INTERESTING(lDebug ? "OpenGroup(2)" : "OpenGroup");
2198  }
2199  else if (!lmem[_mMIT] && mCR_MIT()) {
2200  INTERESTING(lDebug ? "MIT(7)" : "MIT");
2201  lmem[_mMIT] = 1;
2202  }
2203  else {
2204  INTERESTING(lDebug ? "MIT-style(5)" : "MIT-style");
2205  lmem[_mMIT] = 1;
2206  }
2207  }
2208  else if ((!lmem[_mMIT] || mCR_MIT()) && INFILE(_LT_MITref1)) {
2209  INTERESTING(lDebug ? "MIT(ref1)" : "MIT");
2210  lmem[_mMIT] = 1;
2211  }
2212  else if (!lmem[_mMIT] && INFILE(_LT_MITref2)) {
2213  INTERESTING(lDebug ? "MIT(ref2)" : "MIT");
2214  lmem[_mMIT] = 1;
2215  }
2216  else if (!lmem[_mMIT] && INFILE(_LT_MITref6)) {
2217  INTERESTING(lDebug ? "MIT(ref6)" : "MIT");
2218  lmem[_mMIT] = 1;
2219  }
2220  else if (!lmem[_mMIT] && INFILE(_LT_MITref3)) {
2221  INTERESTING(lDebug ? "MIT(ref3)" : "MIT-style");
2222  lmem[_mMIT] = 1;
2223  }
2224  else if (!lmem[_mMIT] && INFILE(_LT_MITref4)) {
2225  INTERESTING(lDebug ? "MIT(ref4)" : "MIT");
2226  lmem[_mMIT] = 1;
2227  }
2228  else if (!lmem[_mMIT] && (INFILE(_LT_MITref5) || INFILE(_LT_MITref9))) {
2229  INTERESTING(lDebug ? "MIT(ref5)" : "MIT");
2230  lmem[_mMIT] = 1;
2231  }
2232  else if (INFILE(_SPDX_MIT_CMU)) {
2233  INTERESTING("MIT-CMU");
2234  }
2235  else if (!lmem[_fREAL] && (INFILE(_SPDX_MIT))) {
2236  INTERESTING(lDebug ? "MIT(SPDX)" : "MIT");
2237  }
2238  else if (!lmem[_mMIT] && !lmem[_fREAL] && INFILE(_LT_MITref7)) {
2239  INTERESTING(lDebug ? "MIT(ref7)" : "MIT");
2240  lmem[_mMIT] = 1;
2241  }
2242  else if (!lmem[_mMIT] && INFILE(_LT_MITref8)) {
2243  INTERESTING(lDebug ? "MIT(ref8/9)" : "MIT");
2244  lmem[_mMIT] = 1;
2245  }
2246  else if (INFILE(_LT_OpenGroup_1)) {
2247  if (INFILE(_CR_OpenGroup)) {
2248  INTERESTING(lDebug ? "OpenGroup(3)" : "OpenGroup");
2249  }
2250  else {
2251  INTERESTING(lDebug ? "OG-style(3)" : "OpenGroup-style");
2252  }
2253  }
2254  else if (INFILE(_LT_OpenGroup_3)) {
2255  if (INFILE(_CR_OpenGroup)) {
2256  INTERESTING(lDebug ? "OpenGroup(5)" : "OpenGroup");
2257  }
2258  else {
2259  INTERESTING(lDebug ? "OG-style(5)" : "OpenGroup-style");
2260  }
2261  }
2262  else if (INFILE(_LT_OpenGroup_PROP)) {
2263  if (!lmem[_mXOPEN] && INFILE(_CR_XOPEN)) {
2264  INTERESTING("XOPEN-EULA");
2265  lmem[_mXOPEN] = 1;
2266  }
2267  else if (INFILE(_CR_OpenGroup)) {
2268  INTERESTING("OpenGroup-Proprietary");
2269  }
2270  else {
2271  INTERESTING("Proprietary");
2272  }
2273  }
2274  else if (INFILE(_LT_X11_1)) {
2275  if (mCR_X11()) {
2276  INTERESTING(lDebug ? "X11(4)" : "X11");
2277  }
2278  else {
2279  INTERESTING(lDebug ? "X11-style(2)" : "X11-style");
2280  }
2281  }
2282  else if (INFILE(_LT_X11_2)) {
2283  if (mCR_X11()) {
2284  INTERESTING(lDebug ? "X11(5)" : "X11");
2285  }
2286  else {
2287  INTERESTING(lDebug ? "X11-style(3)" : "X11-style");
2288  }
2289  }
2290  else if (INFILE(_LT_X11_3)) {
2291  if (mCR_X11()) {
2292  INTERESTING(lDebug ? "X11(6)" : "X11");
2293  }
2294  /*
2295  * Unix System Laboratories
2296  */
2297  else if (INFILE(_CR_USL_EUR)) {
2298  INTERESTING(lDebug ? "USLE(2)" : "USL-Europe");
2299  }
2300  else {
2301  INTERESTING(lDebug ? "X11-style(4)" : "X11-style");
2302  }
2303  }
2304  else if (INFILE(_LT_X11_4)) {
2305  if (mCR_X11()) {
2306  INTERESTING(lDebug ? "X11(7)" : "X11");
2307  }
2308  else {
2309  INTERESTING(lDebug ? "X11-style(5)" : "X11-style");
2310  }
2311  }
2312  else if (INFILE(_PHR_X11_1) || INFILE(_PHR_X11_2)) {
2313  INTERESTING(lDebug ? "PHR(X11)" : "X11");
2314  }
2315  else if (INFILE(_LT_X11_STYLE)) {
2316  INTERESTING(lDebug ? "X11-style(6)" : "X11-style");
2317  }
2318  /*
2319  * ISC License
2320  */
2321  if (INFILE(_PHR_ISC_1) || INFILE(_PHR_ISC_2) || HASTEXT(_URL_ISC, REG_EXTENDED)) {
2322  INTERESTING(lDebug ? "PHR(ISC)" : "ISC");
2323  lmem[_mISC] = 1;
2324  }
2325  else if (INFILE(_LT_MIT_4) && INFILE(_PHR_NO_WARRANTY_12)) {
2326  INTERESTING(lDebug ? "ISC(MIT-style(4))" : "ISC");
2327  lmem[_mISC] = 1;
2328  }
2329  else if (INFILE(_LT_MIT_8) && INFILE(_CR_ISC)) {
2330  INTERESTING(lDebug ? "ISC(MIT-style(8))" : "ISC");
2331  lmem[_mISC] = 1;
2332  }
2334  /*
2335  * NTP License, note that NTP license text is detected with _LT_BSD_2
2336  */
2337  if (INFILE(_TITLE_NTP)) {
2338  INTERESTING("NTP");
2339  lmem[_mNTP] = 1;
2340  }
2342  /* MirOS License (MirOS) */
2343  if (INFILE(_TITLE_MIROS)) {
2344  INTERESTING("MirOS");
2345  lmem[_mMIT] = 1;
2346  }
2348  /* Libpng license */
2349  if (INFILE(_TITLE_LIBPNG)) {
2350  INTERESTING("Libpng");
2351  }
2352  else if (INFILE(_LT_W3C_1)) {
2353  if (INFILE(_CR_W3C)) {
2354  INTERESTING(lDebug ? "W3C(1)" : "W3C");
2355  }
2356  else {
2357  INTERESTING(lDebug ? "W3C-style(1)" : "W3C-style");
2358  }
2359  lmem[_fW3C] = 1;
2360  }
2361  else if (!lmem[_mNTP] && !lmem[_mPYTHON] && !lmem[_fBSD] && INFILE(_LT_W3C_2)) {
2362  if (INFILE(_LT_W3C_19980720)) {
2363  INTERESTING("W3C-19980720");
2364  }
2365  else if (INFILE(_CR_W3C)) {
2366  INTERESTING(lDebug ? "W3C(2)" : "W3C");
2367  }
2368  else {
2369  INTERESTING(lDebug ? "W3C-style(2)" : "W3C-style");
2370  }
2371  lmem[_fW3C] = 1;
2372  }
2373  else if (INFILE(_LT_W3C_3)) {
2374  if (INFILE(_LT_W3C_8)) {
2375  if (INFILE(_LT_W3C_20021231)) {
2376  INTERESTING("W3C");
2377  }
2378  else if (INFILE(_LT_W3C_20150513)) {
2379  INTERESTING("W3C-20150513");
2380  }
2381  }
2382  else if (INFILE(_CR_W3C)) {
2383  INTERESTING(lDebug ? "W3C(3)" : "W3C");
2384  }
2385  else if (INFILE(_LT_W3Cref4)) {
2386  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2387  }
2388  else {
2389  INTERESTING(lDebug ? "W3C-style(3)" : "W3C-style");
2390  }
2391  lmem[_fW3C] = 1;
2392  }
2393  else if (INFILE(_LT_W3C_4) && NOT_INFILE(_LT_PNG_ZLIB_2)) {
2394  if (INFILE(_CR_W3C)) {
2395  INTERESTING(lDebug ? "W3C(4)" : "W3C");
2396  }
2397  else {
2398  INTERESTING(lDebug ? "W3C-style(4)" : "W3C-style");
2399  }
2400  lmem[_fW3C] = 1;
2401  }
2402  else if (INFILE(_LT_W3C_5)) {
2403  if (INFILE(_CR_W3C)) {
2404  INTERESTING(lDebug ? "W3C(5)" : "W3C");
2405  }
2406  else {
2407  INTERESTING(lDebug ? "W3C-style(5)" : "W3C-style");
2408  }
2409  lmem[_fW3C] = 1;
2410  }
2411  else if (INFILE(_LT_W3C_6)) {
2412  if (INFILE(_CR_W3C)) {
2413  INTERESTING(lDebug ? "W3C(6)" : "W3C");
2414  }
2415  else {
2416  INTERESTING(lDebug ? "W3C-style(6)" : "W3C-style");
2417  }
2418  lmem[_fW3C] = 1;
2419  }
2420  else if (INFILE(_LT_W3C_7)) {
2421  if (INFILE(_CR_W3C)) {
2422  INTERESTING(lDebug ? "W3C(7)" : "W3C");
2423  }
2424  else if (INFILE(_LT_OGC)) {
2425  INTERESTING("OGC");
2426  }
2427  else {
2428  INTERESTING(lDebug ? "W3C-style(7)" : "W3C-style");
2429  }
2430  lmem[_fW3C] = 1;
2431  }
2432  else if (INFILE(_LT_W3Cref1)) {
2433  INTERESTING(lDebug ? "W3C(ref1)" : "W3C");
2434  lmem[_fW3C] = 1;
2435  }
2436  else if (INFILE(_LT_W3Cref2)) {
2437  INTERESTING(lDebug ? "W3C(ref2)" : "W3C");
2438  lmem[_fW3C] = 1;
2439  }
2440  else if (INFILE(_LT_W3Cref3)) {
2441  INTERESTING(lDebug ? "W3C(ref3)" : "W3C");
2442  lmem[_fW3C] = 1;
2443  }
2444  else if (INFILE(_LT_W3Cref4)) {
2445  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2446  lmem[_fW3C] = 1;
2447  }
2448  else if (URL_INFILE(_URL_W3C_20021231)) {
2449  INTERESTING(lDebug ? "W3C-20021231(url)" : "W3C");
2450  lmem[_fW3C] = 1;
2451  }
2452  else if (URL_INFILE(_URL_W3C_IP)) {
2453  INTERESTING(lDebug ? "W3C-IP(url)" : "W3C-IP");
2454  lmem[_fW3C] = 1;
2455  }
2456  else if (URL_INFILE(_URL_W3C)) {
2457  INTERESTING(lDebug ? "W3C(url)" : "W3C");
2458  lmem[_fW3C] = 1;
2459  }
2460  else if (!lmem[_mMIT] && INFILE(_LT_MIT_3)) {
2461  if (INFILE(_LT_NTP_0)) {
2462  INTERESTING("NTP-0");
2463  }
2464  else if (mCR_MIT()) {
2465  INTERESTING(lDebug ? "MIT(8)" : "MIT");
2466  }
2467  else {
2468  INTERESTING(lDebug ? "MIT-style(6)" : "MIT-style");
2469  }
2470  lmem[_mMIT] = 1;
2471  }
2472  else if (!lmem[_mMIT] && INFILE(_LT_MIT_4)) {
2473  if (mCR_MIT()) {
2474  INTERESTING(lDebug ? "MIT(9)" : "MIT");
2475  }
2476  else if (!lmem[_mISC] && mCR_FSF()) {
2477  INTERESTING(lDebug ? "FSF(7)" : "FSF");
2478  }
2479  else if (!lmem[_mISC]) {
2480  INTERESTING(lDebug ? "MIT-style(13)" : "MIT-style");
2481  }
2482  lmem[_mMIT] = 1;
2483  }
2484  else if (!lmem[_mMIT] && INFILE(_LT_MIT_8)) {
2485  if (INFILE(_CR_VIXIE)) {
2486  INTERESTING("Vixie");
2487  }
2488  else if (INFILE(_LT_0BSD)) {
2489  INTERESTING("0BSD");
2490  }
2491  else if (mCR_MIT()) {
2492  INTERESTING(lDebug ? "MIT(10)" : "MIT");
2493  }
2494  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2495  INTERESTING("TU-Berlin-2.0");
2496  }
2497  else {
2498  INTERESTING(lDebug ? "MIT-style(8)" : "MIT-style");
2499  }
2500  lmem[_mMIT] = 1;
2501  }
2502  else if (INFILE(_LT_MIT_9)) {
2503  if (INFILE(_CR_SLEEPYCAT)) {
2504  MEDINTEREST(lDebug ? "Sleepycat(2)" : "Sleepycat");
2505  }
2506  else if (INFILE(_CR_BSDCAL)) {
2507  INTERESTING(lDebug ? "BSD(mit)" : "BSD");
2508  lmem[_fBSD] = 1;
2509  }
2510  else if (INFILE(_CR_SUN)) {
2511  INTERESTING(lDebug ? "SUN(mit)" : "SUN");
2512  lmem[_fBSD] = 1;
2513  }
2514  else if (!lmem[_mMIT] && mCR_MIT()) {
2515  INTERESTING(lDebug ? "MIT(11)" : "MIT");
2516  lmem[_mMIT] = 1;
2517  }
2518  else if (!lmem[_mMIT]) {
2519  /*
2520  * Tcl/Tk license has MIT phrase
2521  */
2522  if (INFILE(_LT_TCL)) {
2523  INTERESTING("TCL");
2524  lmem[_fTCL] = 1;
2525  }
2526  else {
2527  INTERESTING(lDebug ? "MIT-style(9)" : "MIT-style");
2528  lmem[_mMIT] = 1;
2529  }
2530  }
2531  }
2532  else if (INFILE(_LT_MIT_10)) {
2533  if (!lmem[_mMIT] && mCR_MIT()) {
2534  INTERESTING(lDebug ? "MIT(12)" : "MIT");
2535  lmem[_mMIT] = 1;
2536  }
2537  else {
2538  INTERESTING(lDebug ? "MIT-style(10)" : "MIT-style");
2539  lmem[_mMIT] = 1;
2540  }
2541  }
2542  else if ((INFILE(_LT_MIROS_PREAMBLE) || INFILE(_TITLE_MIROS)) && INFILE(_LT_MIT_11)) {
2543  INTERESTING(lDebug ? "MIT-style(MirOS)" : "MirOS");
2544  lmem[_mMIT] = 1;
2545  }
2546  else if (INFILE(_LT_MIT_11)) {
2547  INTERESTING(lDebug ? "MIT-style(11)" : "MIT-style");
2548  lmem[_mMIT] = 1;
2549  }
2550  else if (!lmem[_mMIT] && INFILE(_LT_MITDOC)) {
2551  if (mCR_MIT()) {
2552  INTERESTING(lDebug ? "MIT(13)" : "MIT");
2553  }
2554  else {
2555  INTERESTING(lDebug ? "MIT-style(12)" : "MIT-style");
2556  }
2557  lmem[_mMIT] = 1;
2558  }
2559  else if (!lmem[_mMIT] && INFILE(_LT_MIT_0) && NOT_INFILE(_LT_ECL)) {
2560  INTERESTING(lDebug ? "MIT(0)" : "MIT-style");
2561  lmem[_mMIT] = 1;
2562  }
2563  else if (INFILE(_LT_MIT_14)) {
2564  INTERESTING(lDebug ? "MIT-style(14)" : "MIT-style");
2565  lmem[_mMIT] = 1;
2566  }
2567  else if (INFILE(_LT_MIT_15)) {
2568  INTERESTING(lDebug ? "MIT-style(15)" : "ISC-style");
2569  lmem[_mMIT] = 1;
2570  }
2571  else if (INFILE(_LT_MPL_OR_MITX)) {
2572  if (!lmem[_mMPL]) {
2573  cp = MPLVERS();
2574  INTERESTING(lDebug ? "MPL(with-MIT)" : cp);
2575  lmem[_mMPL] = 1;
2576  }
2577  if (!lmem[_mMIT]) {
2578  INTERESTING(lDebug ? "MIT(with-MPL)" : "MIT");
2579  lmem[_mMIT] = 1;
2580  }
2581  }
2582  else if (!lmem[_mMIT] && (URL_INFILE(_URL_MIT) || URL_INFILE(_URL_MIT_ROCK))) {
2583  INTERESTING(lDebug ? "MIT(url)" : "MIT");
2584  lmem[_mMIT] = 1;
2585  }
2586  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2587  INTERESTING("TU-Berlin-1.0");
2588  }
2589  else if (INFILE(_LT_NIST_1) && INFILE(_LT_NIST_2)) {
2590  INTERESTING(lDebug ? "NIST" : "MIT-style");
2591  }
2592  else if (INFILE(_LT_FSFAP)) {
2593  INTERESTING("FSFAP");
2594  }
2596  /*
2597  * Generic CopyLeft licenses
2598  */
2599  if (INFILE(_LT_COPYLEFT_1)) {
2600  INTERESTING("CopyLeft[1]");
2601  }
2602  else if (INFILE(_LT_COPYLEFT_2)) {
2603  INTERESTING("CopyLeft[2]");
2604  }
2606  /*
2607  * OpenContent license
2608  */
2609  if (INFILE(_LT_OPENCONTENT)) {
2610  if (INFILE(_TITLE_OPENCL10)) {
2611  INTERESTING("OCL-1.0");
2612  }
2613  else if (INFILE(_TITLE_OPENCL)) {
2614  INTERESTING("OCL");
2615  }
2616  else {
2617  INTERESTING("OCL-style");
2618  }
2619  }
2621  /*
2622  * jpeg/netpbm and png/zlib and others...
2623  */
2624  if (INFILE(_TITLE_ZLIB)) {
2625  INTERESTING("Zlib");
2626  }
2627  else if (INFILE (_LT_TRUECRYPT_30)) {
2628  INTERESTING("TrueCrypt-3.0");
2629  }
2630  else if (INFILE(_TITLE_LIBPNG)) {
2631  INTERESTING("Libpng");
2632  }
2633  /* IJG */
2634  else if (INFILE(_LT_JPEG_1)) {
2635  INTERESTING(lDebug ? "JPEG(1)" : "IJG");
2636  lmem[_fIJG] = 1;
2637  }
2638  else if (INFILE(_LT_JPEG_2) && HASTEXT(_TITLE_IJG_2, 0)) {
2639  INTERESTING(lDebug ? "JPEG(2)" : "IJG");
2640  lmem[_fIJG] = 1;
2641  }
2642  /* Zlib */
2643  else if (INFILE(_SPDX_zlib_acknowledgement)) {
2644  INTERESTING("zlib-acknowledgement");
2645  }
2646  else if (!lmem[_fREAL] && (INFILE(_SPDX_Zlib))) {
2647  INTERESTING("Zlib");
2648  }
2649  else if (INFILE(_LT_PNG_ZLIB_1) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_3, 0)) {
2650  INTERESTING(lDebug ? "ZLIB(1)" : "Zlib");
2651  }
2652  else if (INFILE(_LT_PNG_ZLIBref4) && NOT_INFILE(_LT_PNG_ZLIBref4_EXHIBIT)) {
2653  INTERESTING(lDebug ? "ZLIB(6)" : "Zlib");
2654  }
2655  else if (!lmem[_fW3C] && INFILE(_LT_PNG_ZLIB_2)) {
2656  if (INFILE(_LT_libmng_2007_Clause_1)) {
2657  if (HASTEXT(_LT_libmng_2007_1, 0)) {
2658  INTERESTING("libmng-2007");
2659  }
2660  else if (INFILE(_LT_libpng_20_Clause_1)) {
2661  INTERESTING("libpng-2.0");
2662  }
2663  }
2664  else {
2665  INTERESTING(lDebug ? "PNG/ZLIB(2)" : "Libpng");
2666  }
2667  }
2668  else if (INFILE(_LT_PNG_ZLIBref1)) {
2669  INTERESTING(lDebug ? "ZLIB(3)" : "Zlib");
2670  }
2671  else if (INFILE(_LT_PNG_ZLIBref2)) {
2672  INTERESTING(lDebug ? "ZLIB(4)" : "Zlib");
2673  }
2674  else if (INFILE(_LT_PNG_ZLIBref3)) { /* might be zlib/libpng license, not sure */
2675  INTERESTING(lDebug ? "ZLIB(5)" : "Zlib-possibility");
2676  }
2677  else if (!LVAL(_TEXT_GNU_LIC_INFO) && (URL_INFILE(_URL_ZLIB_1) || URL_INFILE(_URL_ZLIB_2))) {
2678  INTERESTING(lDebug ? "ZLIB(url)" : "Zlib");
2679  }
2680 
2681  if (INFILE(_LT_INFO_ZIP) || URL_INFILE(_URL_INFO_ZIP)) {
2682  INTERESTING("Info-ZIP");
2683  }
2685  /*
2686  * IETF (primarily docs, RFCs, and protocol/standard proposals) . This
2687  * one is a little strange as text-formatters that print this license
2688  * will occasionally split the text across a page boundary. Here we
2689  * look for 2 separate footprints.
2690  */
2691  if (INFILE(_LT_IETF_1) || INFILE(_LT_IETF_2) || INFILE(_LT_IETF_3) ||
2692  INFILE(_LT_IETF_4)) {
2693  if (mCR_IETF()) {
2694  INTERESTING("IETF");
2695  }
2696  else if (INFILE(_LT_IETF_5)) {
2697  INTERESTING("IETF");
2698  }
2699  else if (HASTEXT(_LT_IETF_7, 0)) {
2700  INTERESTING("IETF");
2701  }
2702  else if (INFILE(_CR_OASIS)) {
2703  INTERESTING("OASIS");
2704  }
2705  else {
2706  INTERESTING("IETF-style");
2707  }
2708  }
2709  /*
2710  * IETF Trust's Legal Provisions
2711  */
2712  else if (INFILE(_LT_IETF_6)) {
2713  INTERESTING("IETF");
2714  }
2715  /*
2716  * Contributions to IETF Standard Process
2717  */
2718  else if (INFILE(_LT_IETF_7)) {
2719  INTERESTING("IETF-contribution");
2720  }
2722  /*
2723  * CDDL
2724  */
2725  if (INFILE(_PHR_CDDL_1) || HASTEXT(_PHR_CDDL_2, REG_EXTENDED)) {
2726  cp = CDDLVERS();
2727  INTERESTING(cp);
2728  lmem[_mCDDL] = 1;
2729  }
2731  /*
2732  * MPL (Mozilla)
2733  * ... Sun SISSL and one Mozilla licensing derivative share wording
2734  */
2735  if (!lmem[_fREAL] && NOT_INFILE(_LT_CPALref) && NOT_INFILE(_TITLE_GSOAP) &&
2736  (INFILE(_LT_MPL_OR) || INFILE(_TITLE_MPL_ref))) {
2737  cp = MPLVERS(); /* NPL, too */
2738  INTERESTING(lDebug ? "MPL/NPL#2" : cp);
2739  lmem[_mMPL] = 1;
2740  }
2741  if (INFILE(_LT_CPALref)) {
2742  if (INFILE(_TITLE_CPAL10)) {
2743  INTERESTING(lDebug ? "CPAL_v1.0(#2)" : "CPAL-1.0");
2744  lmem[_mMPL] = 1;
2745  lmem[_fATTRIB] = 1;
2746  }
2747  else if (INFILE(_TITLE_CPAL)) {
2748  INTERESTING(lDebug ? "CPAL(#2)" : "CPAL");
2749  lmem[_mMPL] = 1;
2750  lmem[_fATTRIB] = 1;
2751  }
2752  }
2753  else if (INFILE(_LT_CPAL_V1_ref)) {
2754  INTERESTING(lDebug ? "CPAL_v1.0(#3)" : "CPAL-1.0");
2755  lmem[_mMPL] = 1;
2756  lmem[_fATTRIB] = 1;
2757  }
2758  if (!lmem[_mMPL] && INFILE(_LT_MPL_2)) {
2759  if (INFILE(_TITLE_SISSL)) {
2760  cp = SISSLVERS();
2761  INTERESTING(lDebug ? "SISSL(MPL)" : cp);
2762  lmem[_mSUN] = 1;
2763  }
2764  else if (INFILE(_TITLE_SUN_PL10)) {
2765  INTERESTING("SPL-1.0");
2766  lmem[_mSUN] = 1;
2767  }
2768  else if (INFILE(_TITLE_SUN_PL)) {
2769  INTERESTING("SPL");
2770  lmem[_mSUN] = 1;
2771  }
2772  else if (INFILE(_TITLE_IDPL_V10)) {
2773  INTERESTING("IDPL-1.0");
2774  lmem[_mMPL] = 1;
2775  }
2776  else if (INFILE(_TITLE_IDPL)) {
2777  INTERESTING("IDPL");
2778  lmem[_mMPL] = 1;
2779  }
2780  else if (INFILE(_TITLE_INTERBASE)) {
2781  INTERESTING("Interbase-1.0");
2782  lmem[_mMPL] = 1;
2783  }
2784  else if (INFILE(_TITLE_NETIZEN_V10)) {
2785  INTERESTING("NOSL-1.0");
2786  lmem[_mMPL] = 1;
2787  }
2788  else if (INFILE(_TITLE_NETIZEN)) {
2789  INTERESTING(lDebug ? "NOSL(#1)" : "NOSL");
2790  lmem[_mMPL] = 1;
2791  }
2792  else if (INFILE(_TITLE_TPL10)) {
2793  INTERESTING(lDebug ? "TPL(v1.0#1)" : "MPL.TPL-1.0");
2794  lmem[_mMPL] = 1;
2795  }
2796  else if (INFILE(_TITLE_TPL)) {
2797  INTERESTING(lDebug ? "TPL(#1)" : "MPL.TPL");
2798  lmem[_mMPL] = 1;
2799  }
2800  else if (INFILE(_TITLE_GSOAP_V13)) {
2801  INTERESTING("gSOAP-1.3b");
2802  lmem[_mGSOAP] = 1;
2803  }
2804  else if (INFILE(_TITLE_GSOAP)) {
2805  INTERESTING("gSOAP");
2806  lmem[_mGSOAP] = 1;
2807  }
2808  else if (INFILE(_TITLE_FLASH2XML10)) {
2809  INTERESTING("Flash2xml-1.0");
2810  }
2811  else if (INFILE(_TITLE_NOKIA10A)) {
2812  INTERESTING("Nokia");
2813  lmem[_mMPL] = 1;
2814  }
2815  else if (INFILE(_LT_NOKIA)) {
2816  INTERESTING("Nokia");
2817  lmem[_mMPL] = 1;
2818  }
2819  else if (INFILE(_TITLE_OPENPL10)) {
2820  INTERESTING("OPL-1.0");
2821  }
2822  else if (INFILE(_TITLE_SNIA_V11)) {
2823  INTERESTING("SNIA-1.1");
2824  }
2825  else if (INFILE(_TITLE_SNIA_V10)) {
2826  INTERESTING("SNIA-1.0");
2827  }
2828  else if (INFILE(_TITLE_CPAL10)) {
2829  INTERESTING(lDebug ? "CPAL_v1.0(#1)" : "CPAL-1.0");
2830  lmem[_mMPL] = 1;
2831  lmem[_fATTRIB] = 1;
2832  }
2833  else if (INFILE(_TITLE_CPAL)) {
2834  INTERESTING(lDebug ? "CPAL(#1)" : "CPAL");
2835  lmem[_mMPL] = 1;
2836  lmem[_fATTRIB] = 1;
2837  }
2838  else if (HASTEXT(_TEXT_MOZNET, REG_EXTENDED)) {
2839  if (INFILE(_TITLE_SUGARCRM_PL)) {
2840  INTERESTING("SugarCRM-1.1.3");
2841  lmem[_mMPL] = 1;
2842  lmem[_fATTRIB] = 1;
2843  }
2844  else if (!lmem[_mMPL] && !lmem[_fREAL] && INFILE(_TITLE_MOZNET_PL)) {
2845  cp = MPLVERS(); /* NPL, too */
2846  INTERESTING(lDebug ? "MPL/NPL#1" : cp);
2847  lmem[_mMPL] = 1;
2848  }
2849  }
2850  else if (INFILE(_TITLE_RHeCos_V11)) {
2851  INTERESTING("RHeCos-1.1");
2852  }
2853  else if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
2854  INTERESTING("Cygnus-eCos-1.0");
2855  }
2856  else if (INFILE(_TITLE_H2_V10)) {
2857  INTERESTING("H2-1.0");
2858  }
2859  else {
2860  if (!lmem[_mCDDL]) {
2861  INTERESTING("MPL-style");
2862  lmem[_mMPL] = 1;
2863  }
2864  }
2865  }
2866  else if (!lmem[_mMPL] && (INFILE(_LT_NPLref) || INFILE(_LT_NPL_1))) {
2867  cp = MPLVERS(); /* NPL, too */
2868  INTERESTING(lDebug ? "MPL/NPL#3" : cp);
2869  lmem[_mMPL] = 1;
2870  }
2871  else if (!lmem[_mMPL] && INFILE(_LT_MPLref1)) {
2872  cp = MPLVERS(); /* NPL, too */
2873  INTERESTING(lDebug ? "MPL/NPL-ref#1" : cp);
2874  lmem[_mMPL] = 1;
2875  }
2876  else if (!lmem[_mMPL] && INFILE(_LT_IDPLref)) {
2877  if (INFILE(_TITLE_IDPL_V10)) {
2878  INTERESTING(lDebug ? "IDPL-v1(ref)" : "IDPL-1.0");
2879  }
2880  else {
2881  INTERESTING(lDebug ? "IDPL(ref)" : "IDPL");
2882  }
2883  lmem[_mMPL] = 1;
2884  }
2885  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2886  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_MPLref2)) {
2887  cp = MPLVERS(); /* NPL, too */
2888  INTERESTING(lDebug ? "MPL/NPL-ref#2" : cp);
2889  lmem[_mMPL] = 1;
2890  }
2891  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2892  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_TITLE_MOZNET_PL)) {
2893  cp = MPLVERS(); /* NPL, too */
2894  INTERESTING(lDebug ? "MPL/NPL#4" : cp);
2895  lmem[_mMPL] = 1;
2896  }
2897  else if (!lmem[_mMPL] && INFILE(_TITLE_NETSCAPE_EULA)) {
2898  INTERESTING("NPL-EULA");
2899  lmem[_mMPL] = 0;
2900  }
2901  else if (INFILE(_LT_NPL_2)) {
2902  INTERESTING(lDebug ? "NPL(#1)" : "NPL");
2903  lmem[_mMPL] = 0;
2904  }
2905  else if (INFILE(_TITLE_OPENPL)) {
2906  INTERESTING(lDebug ? "OPL(title)" : "OPL-style");
2907  }
2909  /*
2910  * Microsoft licenses: open and proprietary/EULA
2911  */
2912  if (INFILE(_LT_MSCORP_SSLref)) {
2913  INTERESTING(lDebug ? "MS-SSL(ref)" : "MS-SSL");
2914  lmem[_fMSCORP] = 1;
2915  }
2916  if (INFILE(_LT_MSCORP_PL)) {
2917  int ms_l = INFILE(_LT_MSCORP_LIMITED);
2918  int ms_r = INFILE(_LT_MSCORP_RL);
2919  if (ms_r && ms_l) {
2920  INTERESTING("MS-LRL");
2921  }
2922  else if (ms_r) {
2923  INTERESTING(lDebug ? "MS-RL(#1)" : "MS-RL");
2924  }
2925  else if (ms_l) {
2926  INTERESTING("MS-LPL");
2927  }
2928  else {
2929  INTERESTING(lDebug ? "MS-PL(#1)" : "MS-PL");
2930  }
2931  }
2932  else if (INFILE(_LT_MSCORP_LIMITEDref1)) {
2933  INTERESTING("MS-LPL");
2934  lmem[_fMSCORP] = 1;
2935  }
2936 
2937  if (INFILE(_TEXT_MICROSOFT)) {
2938  if (INFILE(_LT_MSCORP_INDEMNIFY)) {
2939  INTERESTING("MS-indemnity");
2940  lmem[_fMSCORP] = 1;
2941  }
2942  else if (INFILE(_LT_MSCORP_IP_1)) {
2943  INTERESTING(lDebug ? "MS-IP(1)" : "MS-IP");
2944  lmem[_fMSCORP] = 1;
2945  }
2946  else if (INFILE(_LT_MSCORP_IP_2)) {
2947  INTERESTING(lDebug ? "MS-IP(2)" : "MS-IP");
2948  lmem[_fMSCORP] = 1;
2949  }
2950  else if (INFILE(_LT_MSCORP_PLref1)) {
2951  INTERESTING(lDebug ? "MS-PL(ref1)" : "MS-PL");
2952  lmem[_fMSCORP] = 1;
2953  }
2954  else if (INFILE(_LT_MSCORP_PLref2)) {
2955  INTERESTING(lDebug ? "MS-PL(ref2)" : "MS-PL");
2956  lmem[_fMSCORP] = 1;
2957  }
2958  else if (INFILE(_LT_MSCORP_PLref3)) {
2959  INTERESTING(lDebug ? "MS-PL(ref3)" : "MS-PL");
2960  lmem[_fMSCORP] = 1;
2961  }
2962  else if (INFILE(_LT_MSCORP_RLref)) {
2963  INTERESTING(lDebug ? "MS-RL(ref)" : "MS-RL");
2964  lmem[_fMSCORP] = 1;
2965  }
2966  else if (INFILE(_LT_MSCORP_REFLIC)) {
2967  INTERESTING("MRL");
2968  lmem[_fMSCORP] = 1;
2969  }
2970  else if (INFILE(_LT_MSCORP_EULA_1) ||
2971  INFILE(_TITLE_MSCORP_EULA)) {
2972  INTERESTING(lDebug ? "MS-EULA(1)" : "MS-EULA");
2973  lmem[_fMSCORP] = 1;
2974  }
2975  else if (INFILE(_LT_MSCORP_EULA_2)) {
2976  INTERESTING(lDebug ? "MS-EULA(2)" : "MS-EULA");
2977  lmem[_fMSCORP] = 1;
2978  }
2979  else if (INFILE(_LT_MSCORP_EULA_3)) {
2980  INTERESTING(lDebug ? "MS-EULA(3)" : "MS-EULA");
2981  lmem[_fMSCORP] = 1;
2982  }
2983  else if (INFILE(_LT_MSCORP_EULA_4)) {
2984  INTERESTING(lDebug ? "MS-EULA(4)" : "MS-EULA");
2985  lmem[_fMSCORP] = 1;
2986  }
2987  else if (INFILE(_LT_MSCORP_EULA_5)) {
2988  INTERESTING(lDebug ? "MS-EULA(5)" : "MS-EULA");
2989  lmem[_fMSCORP] = 1;
2990  }
2991  else if (INFILE(_LT_MSCORP_EULA_6)) {
2992  INTERESTING(lDebug ? "MS-EULA(6)" : "MS-EULA");
2993  lmem[_fMSCORP] = 1;
2994  }
2995  else if (INFILE(_LT_MSCORP_1)) {
2996  INTERESTING(lDebug ? "MS(1)" : "Microsoft");
2997  lmem[_fMSCORP] = 1;
2998  }
2999  else if (INFILE(_LT_MSCORP_2)) {
3000  INTERESTING(lDebug ? "MS(2)" : "Microsoft");
3001  lmem[_fMSCORP] = 1;
3002  }
3003  else if (INFILE(_LT_MSCORP_3)) {
3004  INTERESTING(lDebug ? "MS(3)" : "Microsoft");
3005  lmem[_fMSCORP] = 1;
3006  }
3007  else if (INFILE(_LT_MSCORP_4)) {
3008  INTERESTING(lDebug ? "MS(4)" : "Microsoft");
3009  lmem[_fMSCORP] = 1;
3010  }
3011  else if (INFILE(_LT_MSCORP_5)) {
3012  INTERESTING(lDebug ? "MS(5)" : "Microsoft");
3013  lmem[_fMSCORP] = 1;
3014  }
3015  else if (INFILE(_LT_MSCORPref1)) {
3016  INTERESTING("Microsoft");
3017  lmem[_fMSCORP] = 1;
3018  }
3019  }
3021  /*
3022  * Santa Cruz Operation (SCO)
3023  */
3024  if (INFILE(_LT_SCO_COMM) && INFILE(_CR_SCO)) {
3025  INTERESTING("SCO.commercial");
3026  }
3028  /*
3029  * Zonealarm
3030  */
3031  if (INFILE(_LT_ZONEALARM) && INFILE(_TITLE_ZONEALARM_EULA)) {
3032  INTERESTING("ZoneAlarm-EULA");
3033  }
3035  /*
3036  * Ximian
3037  */
3038  if (HASTEXT(_TEXT_XIMIAN, 0)) {
3039  if (INFILE(_CR_XIMIAN)) {
3040  if (INFILE(_LT_XIMIAN)) {
3041  if (INFILE(_TITLE_XIMIANLOGO10)) {
3042  INTERESTING("Ximian-1.0");
3043  }
3044  else if (INFILE(_TITLE_XIMIANLOGO)) {
3045  INTERESTING("Ximian");
3046  }
3047  }
3048  }
3049  }
3051  /*
3052  * Xerox
3053  */
3054  if (HASTEXT(_TEXT_XEROX, 0)) {
3055  if (INFILE(_LT_XEROX_1) || INFILE(_LT_XEROX_2)) {
3056  if (INFILE(_CR_XEROX_1) || INFILE(_CR_XEROX_2)) {
3057  INTERESTING("Xerox");
3058  }
3059  else {
3060  INTERESTING("Xerox-style");
3061  }
3062  }
3063  }
3065  /*
3066  * Artifex Software
3067  */
3068  if (INFILE(_LT_ARTIFEX) && INFILE(_CR_ARTIFEX)) {
3069  INTERESTING("Artifex");
3070  }
3072  /*
3073  * AGE logic
3074  */
3075  if (INFILE(_LT_AGE) && INFILE(_CR_AGE)) {
3076  INTERESTING("AGE-Logic");
3077  }
3079  /*
3080  * OpenSSL
3081  */
3082  if (INFILE(_LT_OPENSSLref1) || INFILE(_LT_OPENSSLref2) ||
3083  INFILE(_LT_OPENSSLref3) || INFILE(_LT_OPENSSLref4) ||
3084  INFILE(_LT_OPENSSLref6) || INFILE(_LT_OPENSSLref7) ||
3085  INFILE(_LT_OPENSSLref8) ) {
3086  INTERESTING(lDebug ? "OpenSSL(ref)" : "OpenSSL");
3087  }
3088  else if (INFILE(_SPDX_OpenSSL) || INFILE(_URL_OPENSSL)) {
3089  INTERESTING(lDebug ? "OpenSSL(phr)" : "OpenSSL");
3090  }
3092  /*
3093  * Dual OpenSSL SSLeay
3094  */
3095  if (INFILE(_LT_COMBINED_OPENSSL_SSLEAY)) {
3096  INTERESTING("OpenSSL");
3097  INTERESTING("SSLeay");
3098  }
3100  /*
3101  * Ruby. Ruby is a dual license which allows distribution also under GPL.
3102  * GPL was earlier recognized beside Ruby here but GPL was not identified
3103  * in all Ruby cases. Therefore GPL statements have bee removed.
3104  */
3105  if (INFILE(_LT_RUBY)) {
3106  INTERESTING("Ruby");
3107  lmem[_fRUBY] = 1;
3108  }
3109  else if (INFILE(_LT_RUBYref1)) {
3110  INTERESTING(lDebug ? "Ruby(ref1)" : "Ruby");
3111  }
3112  else if (INFILE(_LT_RUBYref2)) {
3113  INTERESTING(lDebug ? "Ruby(ref2)" : "Ruby");
3114  }
3115  else if (INFILE(_LT_RUBYref3)) {
3116  INTERESTING(lDebug ? "Ruby(ref3)" : "Ruby");
3117  }
3118  else if (INFILE(_LT_RUBYref4)) {
3119  INTERESTING(lDebug ? "Ruby(ref4)" : "Ruby");
3120  }
3121  else if (INFILE(_LT_RUBYref5)) {
3122  INTERESTING(lDebug ? "Ruby(ref5)" : "Ruby");
3123  }
3124  else if (INFILE(_LT_RUBYref6)) {
3125  INTERESTING(lDebug ? "Ruby(ref6)" : "Ruby");
3126  }
3128  /*
3129  * Python and EGenix.com look a bit alike
3130  * Q: should all these Python rhecks be a family-check like OpenLDAP?
3131  */
3132  if (INFILE(_LT_EGENIX_COM)) {
3133  INTERESTING("eGenix");
3134  }
3135  else if (INFILE(_LT_PYTHON_4)) {
3136  INTERESTING("Python");
3137  lmem[_mPYTHON] = 1;
3138  }
3139  else if (!lmem[_mPYTHON] && lmem[_mPYTH_TEXT]) {
3140  if (INFILE(_LT_PYTHON_1) || INFILE(_LT_PYTHON_2)) {
3141  if (INFILE(_LT_CNRI_PYTHON_GPL)) {
3142  INTERESTING("CNRI-Python-GPL-Compatible");
3143  lmem[_mGPL] = 1;
3144  }
3145  else if (INFILE(_CR_PYTHON) || INFILE(_TITLE_PYTHON)) {
3146  cp = PYTHVERS();
3147  INTERESTING(lDebug ? "Python(1)" : cp);
3148  }
3149  else if (INFILE(_LT_CNRI_PYTHON_1)) {
3150  INTERESTING("CNRI-Python");
3151  }
3152  else if (INFILE(_LT_CNRI_JYTHON)) {
3153  INTERESTING("CNRI-Jython");
3154  }
3155  else {
3156  INTERESTING("Python-style");
3157  }
3158  lmem[_mPYTHON] = 1;
3159  }
3160  else if (INFILE(_SPDX_CNRI_Python_GPL_Compatible)) {
3161  INTERESTING("CNRI-Python-GPL-Compatible");
3162  }
3163  else if (INFILE(_SPDX_CNRI_Python)) {
3164  INTERESTING("CNRI-Python");
3165  }
3166  else if (INFILE(_LT_CNRI_PYTHON_2)) {
3167  INTERESTING("CNRI-Python");
3168  }
3169  else if (INFILE(_LT_PYTHON_3)) {
3170  cp = PYTHVERS();
3171  INTERESTING(lDebug ? "Python(4)" : cp);
3172  lmem[_mPYTHON] = 1;
3173  }
3174  else if (INFILE(_LT_PYTHONSTYLEref)) {
3175  cp = PYTHVERS();
3176  INTERESTING(lDebug ? "Python(ref1)" : "Python-style");
3177  lmem[_mPYTHON] = 1;
3178  }
3179  else if (!lmem[_mLIBRE] && (INFILE(_LT_PYTHONref1) ||
3180  INFILE(_LT_PYTHONref2))) {
3181  cp = PYTHVERS();
3182  INTERESTING(lDebug ? "Python(ref2)" : cp);
3183  lmem[_mPYTHON] = 1;
3184  }
3185  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
3186  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_PYTHONref3)) {
3187  cp = PYTHVERS();
3188  INTERESTING(lDebug ? "Python(ref3)" : cp);
3189  lmem[_mPYTHON] = 1;
3190  }
3191  else if (!lmem[_mPYTHON] && URL_INFILE(_URL_PYTHON)) {
3192  cp = PYTHVERS();
3193  INTERESTING(lDebug ? "Python(url)" : cp);
3194  lmem[_mPYTHON] = 1;
3195  }
3196  else if (!lmem[_mPYTHON] && INFILE(_LT_PYTHON22ref)) {
3197  INTERESTING(lDebug ? "Python(22ref)" : "Python-2.2");
3198  lmem[_mPYTHON] = 1;
3199  }
3200  }
3202  /*
3203  * Intel
3204  */
3205  if (INFILE(_LT_INTEL) && NOT_INFILE(_LT_REAL_RPSL)) {
3206  INTERESTING(lDebug ? "Intel(8)" : "Intel");
3207  }
3208  else if (INFILE(_LT_INTEL_6)) {
3209  INTERESTING(lDebug ? "Intel(9)" : "Intel-other");
3210  }
3211  else if (INFILE(_LT_INTEL_7)) {
3212  INTERESTING(lDebug ? "Intel(10)" : "Intel-other");
3213  }
3214  else if (INFILE(_LT_INTEL_WLAN)) {
3215  INTERESTING("Intel-WLAN");
3216  }
3217  else if (INFILE(_LT_INTEL_ACPI)) {
3218  INTERESTING("Intel-ACPI");
3219  }
3220  else if (INFILE(_SPDX_Intel_ACPI)) {
3221  INTERESTING("Intel-ACPI");
3222  }
3223  else if (INFILE(_LT_ISSL_1) && INFILE(_LT_ISSL_2)) {
3224  INTERESTING("ISSL");
3225  }
3226  else if (!lmem[_fREAL] && INFILE(_SPDX_Intel)) {
3227  INTERESTING("Intel");
3228  }
3229  else if (HASTEXT(_TEXT_INTELCORP, 0)) {
3230  if (INFILE(_LT_INTEL_1)) {
3231  if (INFILE(_LT_INTEL_FW)) {
3232  INTERESTING(lDebug ? "Intel(2)" : "Intel-only-FW");
3233  }
3234  else {
3235  INTERESTING(lDebug ? "Intel(3)" : "Intel");
3236  }
3237  }
3238  else if (INFILE(_LT_INTEL_2)) {
3239  INTERESTING(lDebug ? "Intel(4)" : "Intel");
3240  }
3241  else if (INFILE(_LT_INTEL_3)) {
3242  INTERESTING(lDebug ? "Intel(5)" : "Intel");
3243  }
3244  else if (INFILE(_LT_INTEL_4)) {
3245  INTERESTING(lDebug ? "Intel(6)" : "Intel");
3246  }
3247  else if (INFILE(_LT_INTEL_RESTRICT)) {
3248  INTERESTING("Intel.RESTRICTED");
3249  }
3250  else if (INFILE(_LT_INTEL_BINARY) && HASTEXT(_TEXT_INTELCORPBINARY, 0) && HASTEXT(_TEXT_NOMODIFICATION, 0)) {
3251  INTERESTING("Intel-Binary");
3252  }
3253  }
3254  else if (INFILE(_LT_INTEL_5)) {
3255  INTERESTING(lDebug ? "CPL(Intel)" : "CPL");
3256  INTERESTING(lDebug ? "Intel(7)" : "Intel");
3257  }
3258  else if (INFILE(_LT_INTEL_EULA)) {
3259  INTERESTING("Intel-EULA");
3260  }
3262  /*
3263  * Bellcore
3264  */
3265  if (INFILE(_LT_BELLCORE)) {
3266  if (INFILE(_CR_BELLCORE)) {
3267  INTERESTING("Bellcore");
3268  }
3269  else {
3270  INTERESTING("Bellcore-style");
3271  }
3272  }
3274  /*
3275  * Purdue
3276  */
3277  if (INFILE(_LT_PURDUE) && INFILE(_CR_PURDUE) && HASTEXT(_TEXT_ALTERED_SOURCE, REG_EXTENDED) && HASTEXT(_TEXT_ORIGIN, 0)) {
3278  INTERESTING("Purdue");
3279  /* flag is set to avoid Cisco-style detection */
3280  lmem[_fPURDUE] = 1;
3281  }
3283  /*
3284  * Cisco systems
3285  */
3286  if (!lmem[_fPURDUE] && INFILE(_LT_CISCO)) {
3287  if (HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
3288  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED) &&
3289  HASTEXT(_LT_PNG_ZLIB_CLAUSE_3, 0)) {
3290  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) && INFILE(_LT_Spencer_94_CLAUSE_2)) {
3291  INTERESTING("Spencer-94");
3292  }
3293  else {
3294  INTERESTING("Zlib-style");
3295  }
3296  }
3297  else if (INFILE(_CR_CISCO)) {
3298  INTERESTING("Cisco");
3299  }
3300  else {
3301  INTERESTING("Cisco-style");
3302  }
3303  }
3305  /*
3306  * HP
3307  */
3308  if (INFILE(_LT_HP_DEC)) {
3309  if (mCR_HP()) {
3310  INTERESTING(lDebug ? "HP(8)" : "HP");
3311  }
3312  else if (INFILE(_CR_ADOBE)) {
3313  INTERESTING(lDebug ? "Adobe(8)" : "Adobe");
3314  }
3315  else if (INFILE(_LT_GNUPLOT_1) && INFILE(_LT_GNUPLOT_2)) {
3316  INTERESTING("gnuplot");
3317  }
3318  else {
3319  INTERESTING(lDebug ? "HP-DEC-style(1)" : "HP-DEC-style");
3320  }
3321  }
3322  else if (HASTEXT(_TEXT_HP, REG_EXTENDED)) {
3323  if (INFILE(_LT_HP_1)) {
3324  INTERESTING(lDebug ? "HP(2)" : "HP");
3325  }
3326  else if (INFILE(_LT_HP_3) && INFILE(_LT_HP_snmp_pp)) {
3327  INTERESTING(lDebug ? "HP(3)" : "hp-snmp-pp");
3328  }
3329  else if (INFILE(_LT_HP_4)) {
3330  INTERESTING(lDebug ? "HP(4)" : "HP");
3331  }
3332  else if (INFILE(_LT_HP_5)) {
3333  INTERESTING(lDebug ? "HP(5)" : "HP");
3334  }
3335  else if (INFILE(_LT_HP_6)) {
3336  INTERESTING(lDebug ? "HP(6)" : "HP");
3337  }
3338  else if (INFILE(_LT_HP_7)) {
3339  INTERESTING(lDebug ? "HP(7)" : "HP");
3340  }
3341  else if (INFILE(_LT_COMPAQ_1)) {
3342  INTERESTING(lDebug ? "Compaq(1)" : "HP-Compaq");
3343  }
3344  else if (INFILE(_LT_HP_EULA1)) {
3345  INTERESTING(lDebug ? "HP-EULA(1)" : "HP-EULA");
3346  }
3347  else if (INFILE(_LT_HP_EULA2)) {
3348  INTERESTING(lDebug ? "HP-EULA(2)" : "HP-EULA");
3349  }
3350  else if (INFILE(_LT_HP_EULA3)) {
3351  INTERESTING(lDebug ? "HP-EULA(3)" : "HP-EULA");
3352  }
3353  else if (INFILE(_LT_HP_EULA4)) {
3354  INTERESTING(lDebug ? "HP-EULA(4)" : "HP-EULA");
3355  }
3356  else if (INFILE(_LT_COMPAQ_EULA)) {
3357  INTERESTING(lDebug ? "Compaq(EULA)" : "HP-Compaq");
3358  }
3359  else if (INFILE(_LT_HP_PROPRIETARY_1)) {
3360  INTERESTING(lDebug ? "HP-prop(1)" : "HP-Proprietary");
3361  }
3362  else if (INFILE(_LT_HP_PROPRIETARY_2)) {
3363  INTERESTING(lDebug ? "HP-prop(2)" : "HP-Proprietary");
3364  }
3365  else if (INFILE(_LT_HP_PROPRIETARY_3)) {
3366  INTERESTING(lDebug ? "HP-prop(3)" : "HP-Proprietary");
3367  }
3368  else if (INFILE(_LT_HP_IBM_1)) {
3369  INTERESTING(lDebug ? "HP+IBM(1)" : "HP+IBM");
3370  }
3371  else if (INFILE(_LT_HP_IBM_2)) {
3372  INTERESTING(lDebug ? "HP+IBM(2)" : "HP+IBM");
3373  }
3374  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_1)) {
3375  INTERESTING(lDebug ? "HP-DEC(3)" : "HP-DEC");
3376  lmem[_mHP] = 1;
3377  }
3378  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_2)) {
3379  INTERESTING(lDebug ? "HP-DEC(4)" : "HP-DEC");
3380  lmem[_mHP] = 1;
3381  }
3382  else if (INFILE(_LT_EDS_1) && INFILE(_CR_EDS)) {
3383  INTERESTING(lDebug ? "HP-EDS(1)" : "HP");
3384  }
3385  else if (INFILE(_LT_EDS_2) && INFILE(_CR_EDS)) {
3386  INTERESTING(lDebug ? "HP-EDS(2)" : "HP");
3387  }
3388  }
3389  else if (!lmem[_mHP] && INFILE(_LT_DEC_1)) {
3390  INTERESTING(lDebug ? "HP-DEC-style(2)" : "HP-DEC-style");
3391  }
3392  else if (!lmem[_mHP] && INFILE(_LT_DEC_2)) {
3393  INTERESTING(lDebug ? "HP-DEC-style(3)" : "HP-DEC-style");
3394  }
3395  else if (INFILE(_LT_HP_4)) {
3396  INTERESTING(lDebug ? "HP-style(1)" : "HP-style");
3397  }
3398  else if (INFILE(_LT_COMPAQ_1)) {
3399  INTERESTING(lDebug ? "HP-style(2)" : "HP-style");
3400  }
3401  else if (INFILE(_LT_EDS_1)) {
3402  INTERESTING(lDebug ? "HP-EDS(1#2)" : "HP");
3403  }
3404  else if (INFILE(_LT_EDS_2)) {
3405  INTERESTING(lDebug ? "HP-EDS(2#2)" : "HP");
3406  }
3408  /*
3409  * SUN Microsystems
3410  */
3411  if (!lmem[_mSUN] && (INFILE(_CR_SUN) || INFILE(_TEXT_MICROSYSTEMS))) {
3412  if (INFILE(_LT_SUN_PROPRIETARY) || INFILE(_LT_SUN_PROPRIETARY_2) || INFILE(_LT_SUN_PROPRIETARY_3)) {
3413  INTERESTING(lDebug ? "Sun(Prop)" : "Sun-Proprietary");
3414  lmem[_mSUN] = 1;
3415  }
3416  else if (INFILE(_LT_SUN_RPC)) {
3417  INTERESTING("Sun-RPC");
3418  lmem[_mSUN] = 1;
3419  }
3420  else if (INFILE(_LT_SUN_1)) {
3421  if (INFILE(_LT_SUN_FREE)) {
3422  INTERESTING(lDebug ? "Sun(Freeware)" : "Freeware");
3423  }
3424  else {
3425  INTERESTING(lDebug ? "Sun(3)" : "Sun");
3426  }
3427  lmem[_mSUN] = 1;
3428  }
3429  else if (INFILE(_LT_SUN_2)) {
3430  INTERESTING(lDebug ? "Sun(4)" : "Sun-Proprietary");
3431  lmem[_mSUN] = 1;
3432  }
3433  else if (INFILE(_LT_SUN_3)) {
3434  INTERESTING(lDebug ? "Sun(5)" : "Sun");
3435  lmem[_mSUN] = 1;
3436  }
3437  else if (INFILE(_LT_SUN_4)) {
3438  INTERESTING(lDebug ? "Sun(6)" : "Sun");
3439  lmem[_mSUN] = 1;
3440  }
3441  else if (INFILE(_LT_SUN_5)) {
3442  INTERESTING(lDebug ? "Sun(7)" : "Freeware");
3443  lmem[_mSUN] = 1;
3444  }
3445  else if (INFILE(_LT_SUN_6)) {
3446  INTERESTING(lDebug ? "Sun(8)" : "BSD-style");
3447  lmem[_mSUN] = 1;
3448  }
3449  else if (INFILE(_LT_SUN_NC)) {
3450  INTERESTING("Sun.Non-commercial");
3451  lmem[_mSUN] = 1;
3452  }
3453  else if (INFILE(_LT_SUNrestrict)) {
3454  INTERESTING("Sun.RESTRICTED");
3455  lmem[_mSUN] = 1;
3456  }
3457  else if (INFILE(_LT_SUN_BCLA_1) && INFILE(_TITLE_SUN_BCLA)) {
3458  INTERESTING(lDebug ? "BCLA(1)" : "Sun-BCLA");
3459  lmem[_mSUN] = 1;
3460  }
3461  else if (INFILE(_LT_SUN_BCLA_2)) {
3462  INTERESTING(lDebug ? "BCLA(2)" : "Sun-BCLA");
3463  lmem[_mSUN] = 1;
3464  }
3465  else if (INFILE(_LT_SUN_BCLAref)) {
3466  INTERESTING(lDebug ? "BCLA(ref)" : "Sun-BCLA");
3467  lmem[_mSUN] = 1;
3468  }
3469  else if (INFILE(_LT_SUN_ENTITLE)) {
3470  INTERESTING(lDebug ? "Sun(entitlement)" : "Sun");
3471  lmem[_mSUN] = 1;
3472  }
3473  else if (INFILE(_LT_SUN_ANYagreement)) {
3474  INTERESTING("Sun-EULA");
3475  lmem[_mSUN] = 1;
3476  }
3477  else if (INFILE(_LT_SUN_JAVA)) {
3478  INTERESTING("Sun-Java");
3479  lmem[_mSUN] = 1;
3480  }
3481  else if (INFILE(_LT_SUN_IP)) {
3482  INTERESTING("Sun-IP");
3483  lmem[_mSUN] = 1;
3484  lmem[_fIP] = 1;
3485  }
3486  else if (INFILE(_LT_SUN_SCA)) {
3487  INTERESTING("Sun-SCA");
3488  lmem[_mSUN] = 1;
3489  }
3490  else if (INFILE(_LT_SUN_SCSLref)) {
3491  if (INFILE(_TITLE_SCSL_V23)) {
3492  INTERESTING("SCSL-2.3");
3493  }
3494  else if (INFILE(_TITLE_SCSL_V30)) {
3495  INTERESTING("SCSL-3.0");
3496  }
3497  else {
3498  INTERESTING("SCSL");
3499  }
3500  lmem[_mSUN] = 1;
3501  }
3502  else if (INFILE(_TITLE_SUN_SCSL_TSA) &&
3503  INFILE(_LT_SUN_SCSL_TSA)) {
3504  if (INFILE(_TITLE_TSA_10)) {
3505  INTERESTING("SCSL-TSA-1.0");
3506  }
3507  else {
3508  INTERESTING("SCSL-TSA");
3509  }
3510  lmem[_mSUN] = 1;
3511  }
3512  else if (INFILE(_LT_SUN_SISSLref1)
3513  || INFILE(_LT_SUN_SISSLref2)) {
3514  cp = SISSLVERS();
3515  INTERESTING(lDebug ? "SISSL(ref#1)" : cp);
3516  lmem[_mSUN] = 1;
3517  }
3518  }
3519  else if (!lmem[_fREAL] && INFILE(_LT_SUN_PLref)) {
3520  INTERESTING(lDebug ? "Sun-PL(ref)" : "SPL");
3521  lmem[_mSUN] = 1;
3522  }
3523  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY_V150)) {
3524  INTERESTING("Sun-BCLA-1.5.0");
3525  lmem[_mSUN] = 1;
3526  }
3527  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY)) {
3528  INTERESTING(lDebug ? "BCLA(url)" : "Sun-BCLA");
3529  lmem[_mSUN] = 1;
3530  }
3531  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3532  INTERESTING(lDebug ? "Sun(8)" : "Sun");
3533  lmem[_mSUN] = 1;
3534  }
3535  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3536  INTERESTING(lDebug ? "Sun(9)" : "Sun");
3537  lmem[_mSUN] = 1;
3538  }
3539  else if ((!lmem[_mSUN] && INFILE(_LT_SUN_SISSLref1)) ||
3540  INFILE(_LT_SUN_SISSLref2)) {
3541  cp = SISSLVERS();
3542  INTERESTING(lDebug ? "SISSL(ref#2)" : cp);
3543  lmem[_mSUN] = 1;
3544  }
3545  else if (!lmem[_mSUN] && URL_INFILE(_URL_SISSL)) {
3546  cp = SISSLVERS();
3547  INTERESTING(lDebug ? "SISSL(url)" : cp);
3548  lmem[_mSUN] = 1;
3549  }
3551  if (INFILE(_LT_SUN_PRO)) {
3552  INTERESTING(lDebug ? "SunPro" : "Freeware");
3553  }
3555  /*
3556  * IBM
3557  */
3558  if (INFILE(_TEXT_IBM)) {
3559  if (INFILE(_LT_IBM_RECIP)) {
3560  INTERESTING("IBM-reciprocal");
3561  }
3562  else if (INFILE(_LT_IBM_4)) {
3563  INTERESTING(lDebug ? "IBM(4)" : "IBM-dhcp");
3564  }
3565  else if (INFILE(_LT_IBM_1)) {
3566  INTERESTING(lDebug ? "IBM(1)" : "MIT-style");
3567  }
3568  else if (INFILE(_LT_IBM_3)) {
3569  INTERESTING(lDebug ? "IBM(3)" : "MIT-style");
3570  }
3571  else if (INFILE(_LT_IBM_2)) {
3572  INTERESTING(lDebug ? "IBM(2)" : "IBM");
3573  }
3574  else if (INFILE(_LT_IBM_OWNER)) {
3575  INTERESTING(lDebug ? "IBM(4)" : "IBM");
3576  }
3577  else if (INFILE(_LT_IBM_JIKES)) {
3578  INTERESTING("IBM-JCL");
3579  }
3580  else if (INFILE(_LT_IBM_COURIER)) {
3581  INTERESTING("IBM-Courier");
3582  }
3583  else if (INFILE(_LT_IBM_EULA)) {
3584  INTERESTING(lDebug ? "IBM-EULA(1)" : "IBM-EULA");
3585  }
3586  else if (INFILE(_PHR_IBM_EULA)) {
3587  INTERESTING(lDebug ? "IBM-EULA(2)" : "IBM-EULA");
3588  }
3589  else if (INFILE(_LT_IBM_PIBS)) {
3590  INTERESTING("IBM-pibs");
3591  }
3592  else if (INFILE(_LT_IBM_AS_IS)) {
3593  INTERESTING("IBM-as-is");
3594  }
3595  }
3597  /*
3598  * Motorola
3599  */
3600  if (INFILE(_CR_MOT_1) || INFILE(_CR_MOT_2)) {
3601  if (INFILE(_LT_MOT_1)) {
3602  INTERESTING(lDebug ? "Motorola(1)" : "Motorola");
3603  }
3604  else if (INFILE(_LT_MOT_2)) {
3605  INTERESTING(lDebug ? "Motorola(2)" : "Motorola");
3606  }
3607  }
3608  if (HASTEXT(_TITLE_MOTOROLA_MOBILE, 0)) {
3609  INTERESTING("Motorola-Mobile-SLA");
3610  }
3612  /*
3613  * Java
3614  */
3615  if (INFILE(_LT_JAVA_WSDL4J)) {
3616  INTERESTING("Java-WSDL4J");
3617  }
3618  else if (INFILE(_LT_JAVA_WSDL_SCHEMA)) {
3619  INTERESTING("Java-WSDL-Schema");
3620  }
3621  else if (INFILE(_LT_JAVA_WSDL_POLICY)) {
3622  INTERESTING("Java-WSDL-Policy");
3623  }
3624  else if (INFILE(_LT_JAVA_WSDL_ENUM)) {
3625  INTERESTING("Java-WSDL-Spec");
3626  }
3627  else if (INFILE(_LT_MULTICORP_1)) {
3628  INTERESTING(lDebug ? "Java-Multi(1)" : "Java-Multi-Corp");
3629  }
3630  else if (INFILE(_LT_MULTICORP_2)) {
3631  INTERESTING(lDebug ? "Java-Multi(2)" : "Java-Multi-Corp");
3632  }
3634  /*
3635  * Mibble
3636  */
3637  if (INFILE(_LT_MIBBLE)) {
3638  if (INFILE(_TITLE_MIBBLE_28)) {
3639  INTERESTING("Mibble-2.8");
3640  }
3641  else {
3642  INTERESTING("Mibble");
3643  }
3644  }
3646  /*
3647  * Comtrol Corp
3648  */
3649  if (INFILE(_CR_COMTROL) && INFILE(_LT_COMTROL)) {
3650  INTERESTING("Comtrol");
3651  }
3653  /*
3654  * TrollTech
3655  */
3656  if (INFILE(_LT_TROLLTECH) && INFILE(_CR_TROLLTECH)) {
3657  INTERESTING("Trolltech");
3658  }
3659  else if (INFILE(_LT_QT_COMMref)) {
3660  INTERESTING("Qt.Commercial");
3661  }
3662  else if (INFILE(_LT_QT_PROPRIETARY) || INFILE(_TITLE_QT_PROPRIETARY)) {
3663  INTERESTING("Qt.Commercial");
3664  }
3666  /*
3667  * SNIA (Storage Network Industry) public license
3668  */
3669  if (!lmem[_mMPL] && !lmem[_mSUN] && INFILE(_LT_SNIA_PL)) {
3670  if (INFILE(_TITLE_SNIA_V11)) {
3671  INTERESTING("SNIA-1.1");
3672  }
3673  else if (INFILE(_TITLE_SNIA_V10)) {
3674  INTERESTING("SNIA-1.0");
3675  }
3676  else {
3677  INTERESTING("SNIA");
3678  }
3679  }
3680  else if (INFILE(_LT_SNIAref)) {
3681  if (INFILE(_TITLE_SNIA_V11)) {
3682  INTERESTING(lDebug ? "SNIA-1.1(ref)" : "SNIA-1.1");
3683  }
3684  else if (INFILE(_TITLE_SNIA_V10)) {
3685  INTERESTING(lDebug ? "SNIA-1.0(ref)" : "SNIA-1.0");
3686  }
3687  else {
3688  INTERESTING(lDebug ? "SNIA(ref)" : "SNIA");
3689  }
3690  }
3691  else if (URL_INFILE(_URL_SNIA_V11)) {
3692  INTERESTING(lDebug ? "SNIA-1.1(url)" : "SNIA-1.1");
3693  }
3694  else if (URL_INFILE(_URL_SNIA)) {
3695  INTERESTING(lDebug ? "SNIA(url)" : "SNIA");
3696  }
3698  /*
3699  * BEA
3700  */
3701  if (HASTEXT(_TEXT_BEASYS, 0)) {
3702  if (INFILE(_LT_BEA_1)) {
3703  INTERESTING(lDebug ? "BEA(1)" : "BEA");
3704  }
3705  else if (INFILE(_LT_BEA_2)) {
3706  INTERESTING(lDebug ? "BEA(2)" : "BEA");
3707  }
3708  }
3710  /*
3711  * ADOBE/FRAME
3712  */
3713  if (HASTEXT(_TEXT_ADOBE_FRAME, REG_EXTENDED)) {
3714  if (INFILE(_LT_ADOBE_1)) {
3715  INTERESTING(lDebug ? "Adobe(1)" : "Adobe");
3716  }
3717  else if (!lmem[_mMIT] && INFILE(_LT_ADOBE_2)) {
3718  INTERESTING(lDebug ? "Adobe(2)" : "Adobe");
3719  }
3720  else if (INFILE(_LT_ADOBE_3)) {
3721  INTERESTING(lDebug ? "Adobe(3)" : "Adobe");
3722  }
3723  else if (INFILE(_LT_ADOBE_4)) {
3724  INTERESTING(lDebug ? "Adobe(4)" : "Adobe-EULA");
3725  }
3726  else if (INFILE(_LT_ADOBE_5)) {
3727  INTERESTING(lDebug ? "Adobe(5)" : "Adobe-EULA");
3728  }
3729  else if (INFILE(_LT_ADOBE_6)) {
3730  INTERESTING(lDebug ? "Adobe(6)" : "Adobe-EULA");
3731  }
3732  else if (INFILE(_LT_ADOBE_7)) {
3733  INTERESTING(lDebug ? "Adobe(7)" : "Adobe-EULA");
3734  }
3735  else if (INFILE(_LT_FRAME)) {
3736  INTERESTING(lDebug ? "Adobe(Frame)" : "Adobe");
3737  }
3738  else if (INFILE(_LT_ADOBE_SRC) || INFILE(_TITLE_ADOBE_SRC)) {
3739  INTERESTING(lDebug ? "Adobe(src)" : "Adobe-2006");
3740  }
3741  else if (INFILE(_LT_ADOBE_DATA)) {
3742  INTERESTING(lDebug ? "Adobe(data)" : "Adobe");
3743  }
3744  else if (INFILE(_LT_ADOBE_EULA)) {
3745  INTERESTING("Adobe-EULA");
3746  }
3747  else if (INFILE(_LT_ADOBE_AFM)) {
3748  INTERESTING("APAFML");
3749  }
3750  else if (HASTEXT(_TITLE_ADOBE_DNG, 0)) {
3751  INTERESTING("Adobe-DNG");
3752  }
3753  else if (INFILE(_LT_ADOBE_AFMPARSE_1) && INFILE(_LT_ADOBE_AFMPARSE_2)) {
3754  INTERESTING("Afmparse");
3755  }
3756  else if (INFILE(_LT_ADOBE_OTHER)) {
3757  INTERESTING(lDebug ? "Adobe(other)" : "Adobe");
3758  }
3759  else if (INFILE(_LT_ADOBE_SUB)) {
3760  INTERESTING(lDebug ? "Adobe(sub)" : "Adobe");
3761  }
3762  }
3764  /*
3765  * Docbook and Open Source Metadata Framework
3766  */
3767  if (INFILE(_LT_DOCBOOK)) {
3768  if (HASTEXT(_TEXT_DOCBOOK, 0)) {
3769  INTERESTING("DOCBOOK");
3770  }
3771  else if (HASTEXT(_TEXT_METADATA, 0)) {
3772  INTERESTING("OMF");
3773  }
3774  else {
3775  INTERESTING("DOCBOOK-style");
3776  }
3777  }
3779  /*
3780  * MP3 decoder
3781  */
3782  if (INFILE(_LT_MPEG3)) {
3783  INTERESTING("MPEG3-decoder");
3784  }
3786  /*
3787  * Google
3788  */
3789  if (INFILE(_LT_GOOGLE_1)) {
3790  INTERESTING(lDebug ? "Google(1)" : "Google");
3791  }
3792  else if (INFILE(_LT_GOOGLE_2)) {
3793  INTERESTING(lDebug ? "Google(2)" : "Google");
3794  }
3796  /*
3797  * Mandriva
3798  */
3799  if (INFILE(_LT_MANDRIVA)) {
3800  INTERESTING("Mandriva");
3801  }
3803  /*
3804  * Irondoc
3805  */
3806  if (INFILE(_LT_IRONDOC)) {
3807  INTERESTING("IronDoc");
3808  }
3810  /*
3811  * Quarterdeck Office Systems
3812  */
3813  if (INFILE(_LT_QUARTERDECK) && INFILE(_CR_QUARTERDECK)) {
3814  INTERESTING("QuarterDeck");
3815  }
3817  /*
3818  * Electronic Book Technologies
3819  */
3820  if (INFILE(_LT_EBT)) {
3821  if(INFILE(_CR_EBT)) {
3822  INTERESTING("EBT");
3823  } else {
3824  INTERESTING("EBT-style");
3825  }
3826  }
3828  /*
3829  * SGML
3830  */
3831  if (HASTEXT(_TEXT_SGMLUG, 0) && INFILE(_LT_SGML)) {
3832  INTERESTING("SGML");
3833  }
3835  /*
3836  * LaTeX (KOMA-Script)
3837  */
3838  if (HASTEXT(_TEXT_LATEX, REG_EXTENDED)) {
3839  if (INFILE(_LT_LATEXPL_1) || INFILE(_LT_LATEXPL_2) ||
3840  INFILE(_LT_LATEXPL_3)) {
3841  cp = LPPLVERS();
3842  INTERESTING(lDebug ? "LPPL(1)" : cp);
3843  }
3844  else if (INFILE(_LT_LATEX)) {
3845  cp = LPPLVERS();
3846  INTERESTING(lDebug ? "LPPL(2)" : cp);
3847  }
3848  else if (INFILE(_LT_LATEXPLref1) || INFILE(_LT_LATEXPLref2) ||
3849  INFILE(_LT_LATEXPLref3)) {
3850  cp = LPPLVERS();
3851  INTERESTING(lDebug ? "LPPL(3)" : cp);
3852  }
3853  else if (INFILE(_LT_LATEXref1)) {
3854  cp = LPPLVERS();
3855  INTERESTING(lDebug ? "LPPL(4)" : cp);
3856  }
3857  else if (INFILE(_LT_LATEXref2)) {
3858  cp = LPPLVERS();
3859  INTERESTING(lDebug ? "LPPL(5)" : cp);
3860  }
3861  else if (INFILE(_LT_LATEXref3)) {
3862  cp = LPPLVERS();
3863  INTERESTING(lDebug ? "LPPL(6)" : cp);
3864  }
3865  else if (INFILE(_LT_LATEXref4)) {
3866  cp = LPPLVERS();
3867  INTERESTING(lDebug ? "LPPL(7)" : cp);
3868  }
3869  else if (INFILE(_LT_LATEXref5)) {
3870  cp = LPPLVERS();
3871  INTERESTING(lDebug ? "LPPL(8)" : cp);
3872  }
3873  else if (URL_INFILE(_URL_LATEX)) {
3874  cp = LPPLVERS();
3875  INTERESTING(lDebug ? "LPPL(url)" : cp);
3876  }
3877  }
3879  /*
3880  * QPL
3881  */
3882  if (INFILE(_LT_QPL) || INFILE(_LT_QPLref)) {
3883  if (INFILE(_TITLE_QPL10_1) || INFILE(_TITLE_QPL10_2)) {
3884  INTERESTING("QPL-1.0");
3885  lmem[_mQPL] = 1;
3886  }
3887  else if (INFILE(_TITLE_QPL)) {
3888  INTERESTING("QPL");
3889  lmem[_mQPL] = 1;
3890  }
3891  }
3893  /*
3894  * FREE Public License (not really open/free) and GHOSTSCRIPT
3895  */
3896  if (HASTEXT(_TEXT_GHOSTSCRIPT, 0)) {
3897  if (INFILE(_LT_GS)) {
3898  if (INFILE(_TITLE_GS11)) {
3899  INTERESTING("Ghostscript-GPL-1.1");
3900  }
3901  else {
3902  INTERESTING(lDebug ? "GS-GPL(1)" : "Ghostscript-GPL");
3903  }
3904  }
3905  else if (INFILE(_CR_ALADDIN) || INFILE(_CR_ARTOFCODE)) {
3906  if (INFILE(_LT_GS_GNU1) || INFILE(_LT_GS_GNU2)) {
3907  INTERESTING("GNU-Ghostscript");
3908  }
3909  else if (INFILE(_LT_GNU_1) && INFILE(_LT_GNU_2)) {
3910  INTERESTING(lDebug ? "GS-GPL(2)" : "Ghostscript-GPL");
3911  }
3912  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3913  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3914  if (INFILE(_PHR_NOT_OPEN)) {
3915  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3916  lmem[_mALADDIN] = 1;
3917  }
3918  else {
3919  INTERESTING(lDebug ? "Aladdin-Ghostscript" : "Aladdin");
3920  }
3921  }
3922  else if (INFILE(_LT_ALADDIN_RESTRICT)) {
3923  INTERESTING(lDebug ? "Aladdin(RESTRICTED)": "Aladdin");
3924  }
3925  }
3926  else if (INFILE(_LT_AFPL)) {
3927  INTERESTING("AFPL-Ghostscript");
3928  }
3929  }
3930  else if (INFILE(_LT_FREEPLref_1)) {
3931  INTERESTING("Aladdin");
3932  }
3933  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3934  INTERESTING("Free-PL");
3935  }
3936  /*
3937  * IPTC (International Press Telecommunications Council)
3938  */
3939  else if (INFILE(_TITLE_IPTC) || INFILE(_LT_IPTC_2)) {
3940  INTERESTING("IPTC");
3941  }
3942  else if (INFILE(_LT_IPTC_1) && mCR_IPTC()) {
3943  INTERESTING("IPTC");
3944  }
3945  /*
3946  * Macromedia
3947  */
3948  else if (INFILE(_TITLE_MACROMEDIA_EULA)) {
3949  INTERESTING("MacroMedia-RPSL");
3950  }
3951  /*
3952  * Ontopia
3953  */
3954  else if (INFILE(_LT_ONTOPIA) && INFILE(_TITLE_ONTOPIA)) {
3955  INTERESTING("Ontopia");
3956  }
3958  /*
3959  * Ascender
3960  */
3961  if (INFILE(_LT_ASCENDER_EULA) && INFILE(_TITLE_ASCENDER_EULA)) {
3962  INTERESTING("Ascender-EULA");
3963  }
3965  /*
3966  * ADAPTEC
3967  */
3968  if (INFILE(_LT_ADAPTEC_OBJ)) {
3969  INTERESTING("Adaptec.RESTRICTED");
3970  }
3971  else if (INFILE(_CR_ADAPTEC) && INFILE(_LT_ADAPTEC_GPL)) {
3972  INTERESTING("Adaptec-GPL");
3973  }
3975  /*
3976  * Artistic and Perl
3977  */
3978  if (INFILE(_LT_PERL_1)) {
3979  INTERESTING(lDebug ? "Artistic(Perl#1)" : "Artistic-1.0-Perl");
3980  if (!lmem[_mGPL]) {
3981  INTERESTING("Dual-license");
3982  INTERESTING(lDebug ? "GPL(Perl#1)" : "GPL-1.0-or-later");
3983  }
3984  }
3985  else if (INFILE(_LT_PERL_2)) {
3986  INTERESTING(lDebug ? "Artistic(Perl#2)" : "Artistic-1.0-Perl");
3987  if (!lmem[_mGPL]) {
3988  INTERESTING("Dual-license");
3989  INTERESTING(lDebug ? "GPL(Perl#2)" : "GPL-1.0-or-later");
3990  }
3991  }
3992  else if (INFILE(_LT_PERL_3)) {
3993  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) &&
3994  HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
3995  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED)) {
3996  INTERESTING("Spencer-86");
3997  }
3998  else if (!lmem[_fOPENLDAP] && !TRYGROUP(famOPENLDAP)) {
3999  INTERESTING(lDebug ? "Artistic(Perl#3)" : "Artistic-1.0");
4000  }
4001  }
4002  /*
4003  * Licensed "same as perl itself" will actually be Artistic AND GPL, per
4004  * Larry Wall and the documented licensing terms of "perl"
4005  */
4006  else if (INFILE(_LT_PERLref1)) {
4007  INTERESTING(lDebug ? "Artistic(Perl-ref1)" : "Artistic-1.0-Perl");
4008  if (!lmem[_mGPL]) {
4009  INTERESTING("Dual-license");
4010  INTERESTING(lDebug ? "GPL(Perl-ref1)" : "GPL-1.0-or-later");
4011  }
4012  }
4013  else if (PERL_INFILE(_LT_PERLref2)) {
4014  INTERESTING(lDebug ? "Artistic(Perl-ref2)" : "Artistic-1.0-Perl");
4015  if (!lmem[_mGPL]) {
4016  INTERESTING("Dual-license");
4017  INTERESTING(lDebug ? "GPL(Perl-ref2)" : "GPL-1.0-or-later");
4018  }
4019  }
4020  else if (INFILE(_LT_PERLref3)) {
4021  INTERESTING(lDebug ? "Artistic(Perl-ref3)" : "Artistic-1.0-Perl");
4022  if (!lmem[_mGPL]) {
4023  INTERESTING("Dual-license");
4024  INTERESTING(lDebug ? "GPL(Perl-ref3)" : "GPL-1.0-or-later");
4025  }
4026  }
4027  else if (INFILE(_LT_PERLref4)) {
4028  INTERESTING(lDebug ? "Artistic(Perl-ref4)" : "Artistic-1.0-Perl");
4029  if (!lmem[_mGPL]) {
4030  INTERESTING("Dual-license");
4031  INTERESTING(lDebug ? "GPL(Perl-ref4)" : "GPL-1.0-or-later");
4032  }
4033  }
4034  else if (INFILE(_LT_PERLref5)) {
4035  INTERESTING(lDebug ? "Artistic(Perl-ref5)" : "Artistic-1.0-Perl");
4036  if (!lmem[_mGPL]) {
4037  INTERESTING("Dual-license");
4038  INTERESTING(lDebug ? "GPL(Perl-ref5)" : "GPL-1.0-or-later");
4039  }
4040  }
4041  else if (INFILE(_TITLE_CLARTISTIC)) {
4042  INTERESTING("ClArtistic");
4043  lmem[_fCLA] = 1;
4044  }
4045  else if (!lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
4046  (INFILE(_LT_ART_1) || INFILE(_LT_ARTref1) ||
4047  INFILE(_LT_ARTref2) || INFILE(_LT_ARTref3) ||
4048  INFILE(_LT_ARTref4) || PERL_INFILE(_LT_ARTref5) ||
4049  PERL_INFILE(_LT_ARTref6))) {
4050  if (INFILE(_TITLE_OGTSL)) {
4051  INTERESTING("OGTSL");
4052  }
4053  else if (!lmem[_mLIBRE] && !lmem[_fOPENLDAP] &&
4054  !TRYGROUP(famOPENLDAP)) {
4055  if (INFILE(_LT_ART_V2) || INFILE(_TITLE_ART20)) {
4056  INTERESTING(lDebug ? "Artistic(v2.0#1)" : "Artistic-2.0");
4057  }
4058  else if (INFILE(_PHR_Artistic_20)) {
4059  INTERESTING("Artistic-2.0");
4060  }
4061  else if (INFILE(_TITLE_NBPL_V10)) {
4062  INTERESTING("NBPL-1.0");
4063  lmem[_fARTISTIC] = 1;
4064  }
4065  else if(HASTEXT(_PHR_ARTISTIC_PERL, 0)) {
4066  INTERESTING("Artistic-1.0-Perl");
4067  lmem[_fARTISTIC] = 1;
4068  }
4069  else if (HASTEXT(_PHR_ARTISTIC_CLAUSE8, 0))
4070  {
4071  INTERESTING("Artistic-1.0-cl8");
4072  lmem[_fARTISTIC] = 1;
4073  }
4074  else {
4075  INTERESTING(lDebug ? "Artistic(v1.0#other)" : "Artistic-1.0");
4076  lmem[_fARTISTIC] = 1;
4077  }
4078  }
4079  }
4080  else if (INFILE(_LT_ART_2) && INFILE(_TITLE_ART20)) {
4081  INTERESTING(lDebug ? "Artistic(v2.0#2)" : "Artistic-2.0");
4082  }
4083  else if (INFILE(_FILE_ART1) || INFILE(_FILE_ART2)) {
4084  INTERESTING(lDebug ? "Artistic(deb)" : "Artistic-1.0");
4085  }
4086  else if (URL_INFILE(_URL_ART)) {
4087  INTERESTING(lDebug ? "Artistic(url)" : "Artistic-1.0");
4088  }
4090  /*
4091  * LDP, Manpages, OASIS, GPDL, Linux-HOWTO and Linux-doc
4092  */
4093  if (INFILE(_TITLE_LDPL20)) {
4094  INTERESTING("LDPL-2.0");
4095  }
4096  else if (INFILE(_TITLE_LDPL1A)) {
4097  INTERESTING("LDPL-1A");
4098  }
4099  else if (INFILE(_LT_LDPL)) {
4100  INTERESTING(lDebug ? "LDPL(1)" : "LDPL");
4101  }
4102  else if (INFILE(_LT_LDPLref1)) {
4103  INTERESTING(lDebug ? "LDPL(ref1)" : "LDPL");
4104  }
4105  else if (INFILE(_LT_LDPLref2)) {
4106  INTERESTING(lDebug ? "LDPL(ref2)" : "LDPL");
4107  }
4108  else if (INFILE(_LT_LDPLref3)) {
4109  INTERESTING(lDebug ? "LDPL(ref3)" : "LDPL");
4110  }
4111  /*
4112  * GNU-Manpages, Software in the Public Interest (Debian), aka SPI
4113  */
4114  else if (INFILE(_LT_SPI)) {
4115  if (INFILE(_LT_MANPAGE)) {
4116  INTERESTING("GNU-Manpages");
4117  }
4118  else if (!lmem[_fGPL]) {
4119  if (INFILE(_CR_SPI)) {
4120  INTERESTING("Debian-SPI");
4121  }
4122  else {
4123  INTERESTING("Debian-SPI-style");
4124  }
4125  }
4126  }
4127  else if (INFILE(_LT_GPDLref)) {
4128  INTERESTING(lDebug ? "GPDL(1)" : "GPDL");
4129  }
4130  else if (INFILE(_TITLE_GPDL)) {
4131  INTERESTING(lDebug ? "GPDL(2)" : "GPDL");
4132  }
4133  else if (INFILE(_LT_FREEBSD_DOC) && INFILE(_TITLE_FREEBSD_DOC)) {
4134  INTERESTING("FreeBSD-Doc");
4135  }
4136  else if (INFILE(_LT_LINUX_HOWTO)) {
4137  INTERESTING("Linux-HOWTO");
4138  }
4139  else if (INFILE(_LT_LINUXDOC)) {
4140  INTERESTING("LinuxDoc");
4141  }
4142  else if (INFILE(_LT_IEEE_DOC)) {
4143  INTERESTING("IEEE-Doc");
4144  }
4146  /*
4147  * U-Washington
4148  */
4149  if (INFILE(_LT_UW1)) {
4150  if (INFILE(_CR_UWASHINGTON)) {
4151  INTERESTING("U-Wash.Free-Fork");
4152  }
4153  else {
4154  INTERESTING(lDebug ? "U-Wash-style(1)" : "U-Wash-style");
4155  }
4156  }
4157  else if (INFILE(_LT_UW2)) {
4158  if (INFILE(_CR_UWASHINGTON)) {
4159  INTERESTING(lDebug ? "U-Wash(2)" : "U-Washington");
4160  }
4161  else {
4162  INTERESTING(lDebug ? "U-Wash-style(2)" : "U-Wash-style");
4163  }
4164  }
4165  else if (INFILE(_LT_UW3)) {
4166  if (INFILE(_CR_UWASHINGTON)) {
4167  INTERESTING(lDebug ? "U-Wash(3)" : "U-Washington");
4168  }
4169  else {
4170  INTERESTING(lDebug ? "U-Wash-style(3)" : "U-Wash-style");
4171  }
4172  }
4173  else if (INFILE(_LT_UW4)) {
4174  if (INFILE(_CR_UWASHINGTON)) {
4175  INTERESTING(lDebug ? "U-Wash(4)" : "U-Washington");
4176  }
4177  else {
4178  INTERESTING(lDebug ? "U-Wash-style(4)" : "U-Wash-style");
4179  }
4180  }
4182  /*
4183  * WU-ftpd (not the school north of Oregon!
4184  */
4185  if (INFILE(_LT_WU_FTPD)) {
4186  if (INFILE(_TITLE_WU_FTPD) || INFILE(_CR_WASHU)) {
4187  INTERESTING(lDebug ? "Wash-U(1)" : "Wash-U-StLouis");
4188  }
4189  else {
4190  INTERESTING("Wash-U-style");
4191  }
4192  }
4193  else if (INFILE(_LT_WU_FTPDref)) {
4194  INTERESTING(lDebug ? "Wash-U(ref)" : "Wash-U-StLouis");
4195  }
4196  /*
4197  * Delaware
4198  */
4199  else if (INFILE(_LT_DELAWARE)) {
4200  if (INFILE(_CR_DELAWARE)) {
4201  INTERESTING("U-Del");
4202  }
4203  else {
4204  INTERESTING("U-Del-style");
4205  }
4206  }
4207  /*
4208  * Princeton
4209  */
4210  else if (INFILE(_LT_PRINCETON) && NOT_INFILE(_TITLE_WORDNET)) {
4211  if (INFILE(_CR_PRINCETON)) {
4212  INTERESTING("Princeton");
4213  }
4214  else {
4215  INTERESTING("Princeton-style");
4216  }
4217  }
4218  /*
4219  * University of Michigan
4220  */
4221  else if (INFILE(_LT_UMICHIGAN_1)) {
4222  if (INFILE(_CR_MICHIGAN)) {
4223  INTERESTING(lDebug ? "U-Mich(1)" : "U-Michigan");
4224  }
4225  else {
4226  INTERESTING(lDebug ? "U-Mich-style(1)" : "U-Mich-style");
4227  }
4228  }
4229  else if (INFILE(_LT_UMICHIGAN_2)) {
4230  if (INFILE(_CR_MICHIGAN)) {
4231  INTERESTING(lDebug ? "U-Mich(2)" : "U-Michigan");
4232  }
4233  else {
4234  INTERESTING(lDebug ? "U-Mich-style(2)" : "U-Mich-style");
4235  }
4236  }
4237  /*
4238  * Southern Cal
4239  */
4240  else if (INFILE(_LT_USC_NC)) {
4241  if (INFILE(_CR_USC)) {
4242  INTERESTING("USC.Non-commercial");
4243  }
4244  else {
4245  INTERESTING(lDebug ? "NonC(5)" : "Non-commercial");
4246  }
4247  }
4248  else if (INFILE(_LT_USC)) {
4249  if (INFILE(_CR_USC)) {
4250  INTERESTING("USC");
4251  }
4252  else {
4253  INTERESTING("USC-style");
4254  }
4255  }
4256  /*
4257  * Unversity Corporation for Atmospheric Research (UCAR)
4258  */
4259  else if (INFILE(_LT_UCAR_1) && INFILE(_LT_UCAR_2)) {
4260  INTERESTING("UCAR");
4261  }
4262  else if (INFILE(_LT_UCAR_3) && INFILE(_CR_UCAR)) {
4263  if (INFILE(_CR_UCAR)) {
4264  INTERESTING("UCAR");
4265  }
4266  else {
4267  INTERESTING("UCAR-style");
4268  }
4269  }
4270  /*
4271  * Stanford
4272  */
4273  else if (INFILE(_LT_STANFORD)) {
4274  if (INFILE(_CR_STANFORD)) {
4275  INTERESTING("Stanford");
4276  }
4277  else {
4278  INTERESTING("Stanford-style");
4279  }
4280  }
4281  /*
4282  * U-Cambridge
4283  */
4284  else if (INFILE(_LT_CAMBRIDGE)) {
4285  if (HASTEXT(_LT_MSNTP, 0)) {
4286  INTERESTING("MSNTP");
4287  }
4288  else if (INFILE(_CR_CAMBRIDGE_1) || INFILE(_CR_CAMBRIDGE_2)) {
4289  INTERESTING("U-Cambridge");
4290  }
4291  else {
4292  INTERESTING("U-Cambridge-style");
4293  }
4294  }
4295  /*
4296  * Columbia University
4297  */
4298  else if (INFILE(_CR_COLUMBIA) && INFILE(_LT_COLUMBIA)) {
4299  INTERESTING("U-Columbia");
4300  }
4301  /*
4302  * University of Notre Dame (Different from Boost!)
4303  */
4304  if (INFILE(_LT_ND_1)) {
4305  if (INFILE(_CR_NOTREDAME)) {
4306  INTERESTING(lDebug ? "ND(1)" : "NotreDame");
4307  }
4308  else {
4309  INTERESTING(lDebug ? "ND-style(1)" : "NotreDame-style");
4310  }
4311  }
4312  else if (INFILE(_LT_ND_2)) {
4313  if (INFILE(_CR_NOTREDAME)) {
4314  INTERESTING(lDebug ? "ND(2)" : "NotreDame");
4315  }
4316  else {
4317  INTERESTING(lDebug ? "ND-style(2)" : "NotreDame-style");
4318  }
4319  }
4320  else if (INFILE(_LT_ND_3)) {
4321  if (INFILE(_CR_NOTREDAME)) {
4322  INTERESTING(lDebug ? "ND(3)" : "NotreDame");
4323  }
4324  else {
4325  INTERESTING(lDebug ? "ND-style(3)" : "NotreDame-style");
4326  }
4327  }
4329  /*
4330  * Boost references
4331  */
4332  if (!lmem[_mMIT] && INFILE(_LT_BOOST_2)) {
4333  if (INFILE(_CR_BOOST)) {
4334  INTERESTING(lDebug ? "Boost(2)" : "BSL-1.0");
4335  }
4336  else {
4337  INTERESTING(lDebug ? "Boost-style(2)" : "BSL-style");
4338  }
4339  }
4340  else if (INFILE(_LT_BOOSTref1)) {
4341  if (INFILE(_TITLE_BOOST10) || INFILE(_PHR_BOOST_V10) ||
4342  URL_INFILE(_URL_BOOST_10)) {
4343  INTERESTING(lDebug ? "Boost1.0(ref)" : "BSL-1.0");
4344  }
4345  else {
4346  INTERESTING(lDebug ? "Boost(ref)" : "BSL-1.0");
4347  }
4348  }
4349  else if (INFILE(_LT_BOOST_GRAPH)) {
4350  INTERESTING(lDebug ? "Boost(graph)" : "BSL-1.0");
4351  }
4352  else if (INFILE(_LT_BOOST_LAMBDA)) {
4353  INTERESTING(lDebug ? "Boost(lambda)" : "BSL-1.0");
4354  }
4355  else if (URL_INFILE(_URL_BOOST_10)) {
4356  INTERESTING(lDebug ? "Boost-1.0(ref)" : "BSL-1.0");
4357  }
4358  /*
4359  * Sleepycat NON-Commerical
4360  */
4361  else if (INFILE(_LT_SLEEPYCAT_NC)) {
4362  INTERESTING("Sleepycat.Non-commercial");
4363  }
4365  /*
4366  * Vim license
4367  */
4368  if ((INFILE(_LT_Vim_1) || INFILE(_LT_Vim_2)) && INFILE(_TITLE_Vim)) {
4369  INTERESTING("Vim");
4370  }
4371  else if (INFILE(_PHR_Vim)) {
4372  INTERESTING("Vim");
4373  }
4375  /*
4376  * Vixie license
4377  */
4378  if (INFILE(_LT_VIXIE)) {
4379  INTERESTING("Vixie-license");
4380  }
4382  /*
4383  * Yahoo!
4384  */
4385  if (INFILE(_LT_YAHOO_1)) {
4386  if (INFILE(_LT_YAHOO_BINARY)) {
4387  INTERESTING("Yahoo-EULA");
4388  }
4389  else {
4390  INTERESTING("YPL");
4391  }
4392  }
4393  if(INFILE(_TITLE_YPL_V10)) {
4394  INTERESTING("YPL-1.0");
4395  }
4396  else if(INFILE(_TITLE_YPL_V11)) {
4397  INTERESTING("YPL-1.1");
4398  }
4400  /*
4401  * Public Use
4402  */
4403  if (INFILE(_LT_PUBLIC_USE)) {
4404  if (INFILE(_TITLE_PUBUSE_V10)) {
4405  INTERESTING("Public-Use-1.0");
4406  }
4407  else {
4408  INTERESTING("Public-Use");
4409  }
4410  }
4412  /*
4413  * Apple
4414  */
4415  if (INFILE(_TEXT_APPLE)) {
4416  if (INFILE(_LT_MIT_12)) {
4417  INTERESTING(lDebug ? "Apple MIT License" : "AML");
4418  }
4419  else if (INFILE(_LT_APPLE_1)) {
4420  INTERESTING(lDebug ? "Apple(1)" : "Apple");
4421  }
4422  else if (INFILE(_LT_APPLE_2)) {
4423  INTERESTING(lDebug ? "Apple(2)" : "Apple");
4424  }
4425  else if (INFILE(_LT_APPLE_3)) { /* squeak license */
4426  INTERESTING(lDebug ? "Apple(3)" : "Apple");
4427  }
4428  else if (INFILE(_LT_APPLE_4)) { /* squeak license */
4429  INTERESTING(lDebug ? "Apple(4)" : "Apple-EULA");
4430  }
4431  else if (INFILE(_LT_APPLE_FONTFORGE)) {
4432  INTERESTING("Apple.FontForge");
4433  }
4434  else if (INFILE(_LT_APPLE_SAMPLE)) {
4435  INTERESTING("Apple.Sample");
4436  }
4437  else if (INFILE(_LT_APSLref1) || INFILE(_LT_APSLref2) ||
4438  INFILE(_TITLE_APSL)) {
4439  if (INFILE(_TITLE_APSL20)) {
4440  INTERESTING("APSL-2.0");
4441  }
4442  else if (INFILE(_TITLE_Ferris)) {
4443  INTERESTING(lDebug ? "Ferris-1.2" : "APSL-style");
4444  }
4445  else if (INFILE(_TITLE_APSL_style)) {
4446  INTERESTING("APSL-style");
4447  }
4448  else if (INFILE(_TITLE_APSL12)) {
4449  INTERESTING("APSL-1.2");
4450  }
4451  else if (INFILE(_TITLE_APSL11)) {
4452  INTERESTING("APSL-1.1");
4453  }
4454  else if (INFILE(_TITLE_APSL10)) {
4455  INTERESTING("APSL-1.0");
4456  }
4457  else {
4458  INTERESTING("APSL");
4459  }
4460  }
4461  else if (INFILE(_LT_ACDL)) {
4462  INTERESTING("ACDL");
4463  }
4464  else if (INFILE(_TITLE_APPLE_SLA)) {
4465  INTERESTING(lDebug ? "Apple(SLA)" : "Apple-EULA");
4466  }
4467  else if (URL_INFILE(_URL_APSL)) {
4468  INTERESTING(lDebug ? "APSL(url)" : "APSL");
4469  }
4470  else if (URL_INFILE(_URL_ACDL)) {
4471  INTERESTING(lDebug ? "ACDL(url)" : "ACDL");
4472  }
4473  }
4475  /*
4476  * Redland
4477  */
4478  if (INFILE(_LT_REDLAND)) {
4479  INTERESTING("Redland");
4480  }
4482  /*
4483  * Red Hat and Fedora
4484  */
4485  if (INFILE(_LT_RH_PKGS)) {
4486  if (INFILE(_LT_RH_NONCOMMERCIAL)) {
4487  INTERESTING(lDebug ? "RH(NC)" : "RedHat.Non-commercial");
4488  lmem[_mREDHAT] = 1;
4489  }
4490  else if (INFILE(_LT_RH_FEDORA)) {
4491  INTERESTING(lDebug ? "Fedora(1)" : "Fedora");
4492  lmem[_mREDHAT] = 1;
4493  }
4494  }
4495  else if (INFILE(_LT_RH_REDHAT)) {
4496  INTERESTING(lDebug ? "RH(2)" : "RedHat");
4497  lmem[_mREDHAT] = 1;
4498  }
4499  else if (INFILE(_LT_RH_SPECIFIC)) {
4500  INTERESTING(lDebug ? "RH(4)" : "RedHat-specific");
4501  lmem[_mREDHAT] = 1;
4502  }
4503  else if (INFILE(_LT_FEDORA)) {
4504  INTERESTING(lDebug ? "Fedora(2)" : "Fedora");
4505  lmem[_mREDHAT] = 1;
4506  }
4507  else if (INFILE(_LT_FEDORA_CLA) || INFILE(_TITLE_FEDORA_CLA)) {
4508  INTERESTING("FedoraCLA");
4509  lmem[_mREDHAT] = 1;
4510  }
4511  else if (INFILE(_CR_REDHAT)) {
4512  if (INFILE(_LT_RH_1)) {
4513  INTERESTING(lDebug ? "RH(1)" : "RedHat");
4514  lmem[_mREDHAT] = 1;
4515  }
4516  else if (INFILE(_LT_RH_EULA)) {
4517  INTERESTING("RedHat-EULA");
4518  lmem[_mREDHAT] = 1;
4519  }
4520  }
4522  /*
4523  * SUSE/Novell/UnitedLinux
4524  */
4525  if (INFILE(_CR_SUSE) && INFILE(_PHR_YAST_CR)) {
4526  INTERESTING("YaST.SuSE");
4527  }
4528  else if (INFILE(_TITLE_NOVELL_EULA)) {
4529  INTERESTING("Novell-EULA");
4530  }
4531  else if (INFILE(_TITLE_UL_EULA)) {
4532  INTERESTING("UnitedLinux-EULA");
4533  }
4534  else if (INFILE(_LT_NOVELL)) {
4535  INTERESTING("Novell");
4536  lmem[_fIP] = 1;
4537  }
4538  else if (INFILE(_LT_NOVELL_IP_1)) {
4539  INTERESTING(lDebug ? "Novell-IP(1)" : "Novell-IP");
4540  lmem[_fIP] = 1;
4541  }
4542  else if (INFILE(_LT_NOVELL_IP_2)) {
4543  INTERESTING(lDebug ? "Novell-IP(2)" : "Novell-IP");
4544  lmem[_fIP] = 1;
4545  }
4547  /*
4548  * Epson Public license
4549  */
4550  if (INFILE(_LT_EPSON_PL) && INFILE(_TITLE_EPSON_PL)) {
4551  INTERESTING("Epson-PL");
4552  }
4553  else if (INFILE(_LT_EPSON_EULA) && INFILE(_TITLE_EPSON_EULA)) {
4554  INTERESTING("Epson-EULA");
4555  }
4557  /*
4558  * Open Publication license
4559  */
4560  if (INFILE(_LT_OPENPUBL_1) || INFILE(_LT_OPENPUBL_2)) {
4561  if (INFILE(_TITLE_OPENPUBL04)) {
4562  INTERESTING("Open-PL-0.4");
4563  }
4564  else if (INFILE(_TITLE_OPENPUBL10) || URL_INFILE(_URL_OPEN_PL_V10)) {
4565  INTERESTING("Open-PL-1.0");
4566  }
4567  else if (INFILE(_TITLE_OPENPUBL)) {
4568  INTERESTING("Open-PL");
4569  }
4570  else {
4571  INTERESTING("Open-PL-style");
4572  }
4573  }
4574  else if (INFILE(_LT_OPENPUBLref)) {
4575  INTERESTING(lDebug ? "Open-PL(ref)" : "Open-PL");
4576  }
4578  /*
4579  * Free Art License
4580  */
4581  if (INFILE(_LT_FREEART_V10)) {
4582  INTERESTING("FAL-1.0");
4583  }
4584  else if (INFILE(_LT_FREEART_V13)) {
4585  INTERESTING("FAL-1.3");
4586  }
4588  /*
4589  * RSA Security, Inc.
4590  */
4591  if (INFILE(_LT_RSA_4)) {
4592  INTERESTING(lDebug ? "RSA(4)" : "RSA-MD");
4593  }
4594  else if (INFILE(_LT_RSA_5)) {
4595  INTERESTING(lDebug ? "RSA(5)" : "RSA-DNS");
4596  }
4597  else if (INFILE (_LT_RSA_CRYPTOKI_1) && INFILE(_LT_RSA_CRYPTOKI_2)){
4598  INTERESTING("RSA-Cryptoki");
4599  }
4600  else if (INFILE(_LT_RSA_3)) {
4601  INTERESTING(lDebug ? "RSA(3)" : "RSA-Security");
4602  }
4603  else if (INFILE(_CR_RSA)) {
4604  if (INFILE(_LT_RSA_1)) {
4605  INTERESTING(lDebug ? "RSA(1)" : "RSA-Security");
4606  }
4607  else if (INFILE(_LT_RSA_2)) {
4608  INTERESTING(lDebug ? "RSA(2)" : "RSA-Security");
4609  }
4610  }
4612  /* Some licenses only deal with fonts */
4613  if (HASTEXT(_TEXT_FONT, 0)) {
4614  /*
4615  * AGFA Monotype
4616  */
4617  if (INFILE(_LT_AGFA)) {
4618  INTERESTING("AGFA.RESTRICTED");
4619  }
4620  else if (INFILE(_LT_AGFA_EULA)) {
4621  INTERESTING("AGFA-EULA");
4622  }
4623  /*
4624  * Bigelow and Holmes
4625  */
4626  if (INFILE(_LT_BH_FONT)) {
4627  if (INFILE(_CR_BH)) {
4628  INTERESTING("BH-Font");
4629  }
4630  else {
4631  INTERESTING("BH-Font-style");
4632  }
4633  }
4635  /*
4636  * BIZNET
4637  */
4638  if (INFILE(_LT_BIZNET)) {
4639  if (INFILE(_CR_BIZNET)) {
4640  INTERESTING("BIZNET");
4641  }
4642  else {
4643  INTERESTING("BIZNET-style");
4644  }
4645  }
4647  /*
4648  * BITSTREAM
4649  */
4650  if (INFILE(_LT_BITSTREAM_1)) {
4651  INTERESTING(lDebug ? "Bitstream(2)" : "Bitstream");
4652  }
4653  else if (INFILE(_LT_BITSTREAM_2)) {
4654  INTERESTING(lDebug ? "Bitstream(3)" : "Bitstream");
4655  }
4657  /*
4658  * Larabie Fonts
4659  */
4660  if (INFILE(_LT_LARABIE_EULA) && INFILE(_TITLE_LARABIE_EULA)) {
4661  INTERESTING("Larabie-EULA");
4662  }
4664  /*
4665  * Baekmuk Fonts and Hwan Design
4666  */
4667  if (INFILE(_LT_BAEKMUK_1)) {
4668  INTERESTING("Baekmuk-Font");
4669  }
4670  else if (INFILE(_LT_BAEKMUK_2)) {
4671  INTERESTING("Baekmuk.Hwan");
4672  }
4674  /*
4675  * Information-Technology Promotion Agency (IPA)
4676  */
4677  if (INFILE(_LT_IPA_EULA)) {
4678  INTERESTING("IPA-Font-EULA");
4679  }
4681  /*
4682  * Arphic Public License
4683  */
4684  if (INFILE(_LT_ARPHIC)) {
4685  if (INFILE(_CR_ARPHIC)) {
4686  INTERESTING("Arphic-Font-PL");
4687  }
4688  else {
4689  INTERESTING("Arphic-style");
4690  }
4691  }
4692  }
4694  /*
4695  * AT&T
4696  */
4697  if (INFILE(_LT_ATT_1)) {
4698  if (INFILE(_CR_ATT)) {
4699  INTERESTING(lDebug ? "ATT(1)" : "ATT");
4700  }
4701  else {
4702  INTERESTING(lDebug ? "ATT-style(1)" : "ATT-style");
4703  }
4704  }
4705  else if (INFILE(_LT_ATT_2)) {
4706  if (!lmem[_fBSD] && INFILE(_CR_BSDCAL)) {
4707  INTERESTING(lDebug ? "BSD(14)" : "BSD");
4708  lmem[_fBSD] = 1;
4709  }
4710  else if (INFILE(_CR_ATT) || INFILE(_CR_LUCENT)) {
4711  INTERESTING(lDebug ? "ATT(2)" : "ATT");
4712  }
4713  else {
4714  INTERESTING(lDebug ? "ATT-style(2)" : "ATT-style");
4715  }
4716  }
4717  else if (INFILE(_LT_ATT_SRC_1) || INFILE(_LT_ATT_SRC_2)) {
4718  if (INFILE(_TITLE_ATT_SRC_12D)) {
4719  INTERESTING("ATT-Source-1.2d");
4720  }
4721  else if (INFILE(_TITLE_ATT_SRC_10)) {
4722  INTERESTING("ATT-Source-1.0");
4723  }
4724  else {
4725  INTERESTING("ATT-Source");
4726  }
4727  }
4728  else if (INFILE(_LT_ATT_NONCOMMERC1) || INFILE(_LT_ATT_NONCOMMERC2)) {
4729  INTERESTING("ATT.Non-commercial");
4730  }
4732  /*
4733  * Silicon Graphics
4734  */
4735  if (INFILE(_TITLE_SGI_V10)) {
4736  INTERESTING("SGI-B-1.0");
4737  }
4738  else if (INFILE(_TITLE_SGI_V11)) {
4739  INTERESTING("SGI-B-1.1");
4740  }
4741  else if (INFILE(_TITLE_SGI_V20)) {
4742  INTERESTING("SGI-B-2.0");
4743  }
4744  else if (INFILE(_LT_SGI_1)) {
4745  if (HASTEXT(_PHR_SGI_LIBTIFF, REG_EXTENDED)) {
4746  INTERESTING("libtiff");
4747  }
4748  else if (HASTEXT(_PHR_LIBTIFF_STYLE, REG_EXTENDED)) {
4749  INTERESTING("libtiff-style");
4750  }
4751  }
4752  else if (INFILE(_LT_SGI_2)) {
4753  if (INFILE(_LT_SGI_V10)) {
4754  INTERESTING("SGI-B-1.0");
4755  }
4756  else if (INFILE(_LT_SGI_V11)) {
4757  INTERESTING("SGI-B-1.1");
4758  }
4759  else if (INFILE(_LT_SGI_V20)) {
4760  INTERESTING("SGI-B-2.0");
4761  }
4762  else if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4763  INTERESTING("SGI");
4764  }
4765  }
4766  else if (INFILE(_LT_SGI_1)) {
4767  if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4768  INTERESTING("SGI-style");
4769  }
4770  }
4771  else if (INFILE(_LT_SGI_FREEW)) {
4772  INTERESTING("SGI-Freeware");
4773  }
4774  else if (INFILE(_LT_SGI_GLX)) {
4775  if (INFILE(_TITLE_SGI_GLX_V10)) {
4776  INTERESTING(lDebug ? "SGI_GLX(1.0)" : "SGI_GLX-1.0");
4777  }
4778  else {
4779  INTERESTING("SGI_GLX");
4780  }
4781  }
4782  else if (INFILE(_LT_SGI_GLXref) && INFILE(_CR_SGI)) {
4783  if (INFILE(_TITLE_SGI_GLX_V10)) {
4784  INTERESTING(lDebug ? "SGI_GLX(10ref)" : "SGI_GLX-1.0");
4785  }
4786  else {
4787  INTERESTING(lDebug ? "SGI_GLX(ref)" : "SGI_GLX");
4788  }
4789  }
4790  else if (INFILE(_LT_SGI_PROPRIETARY) && INFILE(_CR_SGI)) {
4791  INTERESTING("SGI-Proprietary");
4792  }
4794  /*
4795  * 3DFX (Glide)
4796  */
4797  if (INFILE(_CR_3DFX_1) || INFILE(_CR_3DFX_2)) {
4798  if (INFILE(_LT_GLIDE_3DFX)) {
4799  INTERESTING("Glide");
4800  }
4801  else if (INFILE(_LT_GLIDE_GPL)) {
4802  INTERESTING("3DFX-PL");
4803  }
4804  }
4805  /*
4806  * Nvidia Corp
4807  */
4808  else if (INFILE(_LT_NVIDIA_EULA_3)) {
4809  INTERESTING(lDebug ? "Nvidia(1)" : "Nvidia-EULA-a");
4810  }
4811  else if (INFILE(_CR_NVIDIA) && INFILE(_LT_NVIDIA)) {
4812  INTERESTING(lDebug ? "Nvidia(2)" : "Nvidia");
4813  }
4814  else if (INFILE(_LT_NVIDIA_EULA_2)) {
4815  INTERESTING(lDebug ? "Nvidia(3)" : "Nvidia-EULA-b");
4816  }
4817  else if (INFILE(_LT_NVIDIA_EULA_1) || INFILE(_TITLE_NVIDIA)) {
4818  INTERESTING(lDebug ? "Nvidia(4)" : "Nvidia-EULA-b");
4819  }
4820  else if (INFILE(_LT_NVIDIA_1)) {
4821  INTERESTING(lDebug ? "Nvidia(5)" : "Nvidia");
4822  }
4823  /*
4824  * ATI Corp
4825  */
4826  else if (INFILE(_TITLE_ATI_EULA) && INFILE(_LT_ATI_EULA)) {
4827  INTERESTING("ATI-EULA");
4828  }
4829  /*
4830  * Agere Systems
4831  */
4832  else if (INFILE(_TITLE_AGERE_EULA) && INFILE(_LT_AGERE_EULA)) {
4833  INTERESTING("Agere-EULA");
4834  }
4836  /*
4837  * KD Tools, AB
4838  */
4839  if (INFILE(_TITLE_KDAB_EULA)) {
4840  if (INFILE(_LT_KDAB_1)) {
4841  INTERESTING(lDebug ? "KDAB(1)" : "KD-Tools-EULA");
4842  }
4843  if (INFILE(_LT_KDAB_2)) {
4844  INTERESTING(lDebug ? "KDAB(2)" : "KD-Tools-EULA");
4845  }
4846  }
4848  /*
4849  * KDE
4850  */
4851  if (INFILE(_PHR_KDE_FILE) && INFILE(_LT_KDE)) {
4852  INTERESTING("KDE");
4853  }
4855  /*
4856  * Broadcom
4857  */
4858  if (INFILE(_LT_BROADCOM_EULA) && INFILE(_CR_BROADCOM)) {
4859  INTERESTING("Broadcom-EULA");
4860  }
4862  /*
4863  * DARPA (Defense Advanved Research Projects Agency)
4864  */
4865  if (INFILE(_LT_DARPA_COUGAAR_1)) {
4866  INTERESTING("DARPA-Cougaar");
4867  }
4868  else if (INFILE(_LT_DARPA)) {
4869  INTERESTING("DARPA");
4870  }
4872  /*
4873  * Tektronix
4874  */
4875  if (INFILE(_LT_TEKTRONIX)) {
4876  if (INFILE(_CR_TEKTRONIX)) {
4877  INTERESTING("Tektronix");
4878  }
4879  else {
4880  INTERESTING("Tektronix-style");
4881  }
4882  }
4884  /*
4885  * Alliance for Open Media Patent License
4886  */
4887  if (INFILE(_LT_AOM_Patent)) {
4888  INTERESTING("Alliance for Open Media Patent License 1.0");
4889  }
4891  /*
4892  * Open Market, Inc
4893  */
4894  if (INFILE(_LT_CADENCE) && INFILE(_CR_CADENCE)) {
4895  INTERESTING("Cadence");
4896  }
4898  /*
4899  * Open Market, Inc
4900  */
4901  if (INFILE(_LT_OPENMKT)) {
4902  INTERESTING("OpenMarket");
4903  }
4905  /*
4906  * Unicode
4907  */
4908  if (!lmem[_fUNICODE]) {
4909  if (INFILE(_TITLE_UNICODE)) {
4910  INTERESTING(lDebug ? "Unicode(4)" : "Unicode");
4911  }
4912  else if (INFILE(_LT_UNICODE_1) && INFILE(_CR_UNICODE)) {
4913  INTERESTING(lDebug ? "Unicode(1)" : "Unicode");
4914  }
4915  else if (INFILE(_LT_UNICODE_2)) {
4916  INTERESTING(lDebug ? "Unicode(2)" : "Unicode");
4917  }
4918  else if (INFILE(_LT_UNICODE_3)) {
4919  INTERESTING(lDebug ? "Unicode(3)" : "Unicode");
4920  }
4921  else if (INFILE(_LT_UNICODE_4)) {
4922  INTERESTING(lDebug ? "Unicode(4)" : "Unicode-TOU");
4923  }
4924  else if (URL_INFILE(_URL_UNICODE)) {
4925  INTERESTING(lDebug ? "Unicode(5)" : "Unicode-TOU");
4926  }
4927  else if (INFILE(_TITLE_UNICODE_TOU) && INFILE(_LT_UNICODE_TOU)) {
4928  INTERESTING("Unicode-TOU");
4929  }
4931  }
4932  /*
4933  * Software Research Assoc
4934  */
4935  if (INFILE(_LT_SRA) && INFILE(_CR_SRA)) {
4936  INTERESTING("SW-Research");
4937  }
4939  /*
4940  * MITRE Collaborative Virtual Workspace (CVW) License
4941  */
4942  if (INFILE(_LT_MITRE_1)) {
4943  if (INFILE(_CR_MITRE)) {
4944  INTERESTING(lDebug ? "MitreCVW(1)" : "MitreCVW");
4945  }
4946  else if (INFILE(_TITLE_CVW)) {
4947  INTERESTING(lDebug ? "MitreCVW(2)" : "MitreCVW");
4948  }
4949  else {
4950  INTERESTING("MitreCVW-style");
4951  }
4952  }
4953  else if (INFILE(_LT_MITRE_2)) {
4954  INTERESTING(lDebug ? "Mitre(2)" : "Mitre");
4955  }
4957  /*
4958  * Jabber, Motosoto
4959  */
4960  if (INFILE(_LT_JABBER_1)) {
4961  if (INFILE(_TITLE_MOTOSOTO091)) {
4962  INTERESTING("Motosoto");
4963  }
4964  else if (INFILE(_TITLE_JABBER)) {
4965  INTERESTING("Jabber");
4966  }
4967  }
4968  else if (INFILE(_LT_JABBER_2)) {
4969  if (INFILE(_TITLE_JABBER_V10)) {
4970  INTERESTING(lDebug ? "Jabber(1.0)" : "Jabber-1.0");
4971  }
4972  else {
4973  INTERESTING(lDebug ? "Jabber(2)" : "Jabber");
4974  }
4975  }
4976  else if (URL_INFILE(_URL_JABBER)) {
4977  INTERESTING(lDebug ? "Jabber(url)" : "Jabber");
4978  }
4980  /*
4981  * CPL, Lucent Public License, Eclipse PL
4982  */
4983  int _epl = 0;
4984  if (INFILE(_LT_CPL_1) || INFILE(_LT_CPL_2)) {
4985  if (INFILE(_TITLE_IBM_PL20)) {
4986  INTERESTING("IPL-2.0");
4987  }
4988  else if (INFILE(_TITLE_IBM_PL10)) {
4989  INTERESTING("IPL-1.0");
4990  }
4991  else if (INFILE(_TITLE_IBM_PL)) {
4992  INTERESTING("IPL");
4993  }
4994  else if (INFILE(_TITLE_OpenGroup)) {
4995  INTERESTING("OpenGroup");
4996  }
4997  else if (INFILE(_TITLE_EPL10)) {
4998  INTERESTING(lDebug ? "Eclipse(v.0#1)" : "EPL-1.0");
4999  _epl = 1;
5000  }
5001  else if (INFILE(_TITLE_EPL20)) {
5002  INTERESTING(lDebug ? "Eclipse(v.2#1)" : "EPL-2.0");
5003  _epl = 1;
5004  }
5005  else if (INFILE(_TITLE_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5006  INTERESTING(lDebug ? "Eclipse(#1)" : "EPL");
5007  _epl = 1;
5008  }
5009  else if (INFILE(_TITLE_LUCENT102)) {
5010  INTERESTING("LPL-1.02");
5011  }
5012  else if (INFILE(_TITLE_LUCENT10)) {
5013  INTERESTING("LPL-1.0");
5014  }
5015  else if (NOT_INFILE(_LT_CA)) {
5016  cp = CPLVERS();
5017  INTERESTING(lDebug ? "CPL(#1)" : cp);
5018  }
5019  }
5020  else if (INFILE(_LT_LPL_102)) {
5021  INTERESTING("LPL-1.02");
5022  }
5023  else if (!lmem[_fREAL] && INFILE(_LT_CPLref1) && NOT_INFILE(_TITLE_EPL10)) {
5024  cp = CPLVERS();
5025  INTERESTING(lDebug ? "CPL(ref)" : cp);
5026  }
5027  else if (URL_INFILE(_URL_CPL)) {
5028  cp = CPLVERS();
5029  INTERESTING(lDebug ? "CPL(url)" : cp);
5030  }
5031  else if (INFILE(_PHR_CPL_05)) {
5032  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-0.5");
5033  }
5034  else if (INFILE(_PHR_CPL_10)) {
5035  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-1.0");
5036  }
5037  else if (INFILE(_LT_IBM_PLref1)) {
5038  INTERESTING(lDebug ? "IBM-PL(ref)" : "IPL");
5039  }
5040  else if (URL_INFILE(_URL_IBM_PL)) {
5041  INTERESTING(lDebug ? "IBM-PL(url)" : "IPL");
5042  }
5044  /* More EPL cases */
5045  if (!_epl) {
5046  if (INFILE(_LT_EPL20ref_1)) {
5047  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-2.0");
5048  }
5049  else if (INFILE(_LT_EPL10ref_1) || INFILE(_LT_EPL10ref_2) || HASTEXT(_LT_EPL10ref_3, REG_EXTENDED)) {
5050  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5051  }
5052  else if (INFILE(_LT_EPLref)) {
5053  if (INFILE(_TITLE_EPL10)) {
5054  INTERESTING(lDebug ? "Eclipse(v.0#2)" : "EPL-1.0");
5055  }
5056  else if (INFILE(_TITLE_EPL20)) {
5057  INTERESTING(lDebug ? "Eclipse(v.2#2)" : "EPL-2.0");
5058  }
5059  else {
5060  INTERESTING(lDebug ? "Eclipse(#2)" : "EPL");
5061  }
5062  }
5063  else if (INFILE(_LT_EPL10ref_1)) {
5064  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5065  }
5066  else if (INFILE(_LT_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5067  if (INFILE(_TITLE_EPL10ref_1)) {
5068  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-1.0");
5069  }
5070  if (INFILE(_TITLE_EPL20ref_1)) {
5071  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-2.0");
5072  }
5073  }
5074  }
5076  /*
5077  * SyBase/Watcom
5078  */
5079  if (INFILE(_LT_SYBASE)) {
5080  if (INFILE(_TITLE_SYBASE10)) {
5081  INTERESTING("Watcom-1.0");
5082  }
5083  else {
5084  INTERESTING("Watcom");
5085  }
5086  }
5088  /*
5089  * Ricoh
5090  */
5091  if (INFILE(_LT_RICOH)) {
5092  if (INFILE(_TITLE_RICOH10)) {
5093  INTERESTING("RSCPL");
5094  }
5095  }
5097  /*
5098  * OCLC
5099  */
5100  if (INFILE(_LT_OCLC)) {
5101  if (INFILE(_TITLE_OCLC20)) {
5102  INTERESTING("OCLC-2.0");
5103  }
5104  else if (INFILE(_TITLE_OCLC10)) {
5105  INTERESTING("OCLC-1.0");
5106  }
5107  else {
5108  INTERESTING("OCLC");
5109  }
5110  }
5112  /*
5113  * Educational Community License
5114  */
5115  if (INFILE(_LT_ECL1)) {
5116  INTERESTING("ECL-1.0");
5117  lmem[_mMIT] = 1;
5118  }
5119  else if (INFILE(_LT_ECL2)) {
5120  INTERESTING("ECL-2.0");
5121  lmem[_mMIT] = 1;
5122  }
5123  else if (INFILE(_LT_ECL)) {
5124  INTERESTING(lDebug ? "ECL(1)" : "ECL-1.0");
5125  lmem[_mMIT] = 1;
5126  }
5128  /*
5129  * EU DataGrid and Condor PL
5130  */
5131  if (INFILE(_LT_EU)) {
5132  if (INFILE(_TITLE_CONDOR_V10)) {
5133  INTERESTING("Condor-1.0");
5134  } else if (INFILE(_TITLE_CONDOR_V11)) {
5135  INTERESTING("Condor-1.1");
5136  }
5137  else {
5138  INTERESTING("EUDatagrid");
5139  }
5140  }
5141  else if (URL_INFILE(_URL_EUDatagrid)) {
5142  INTERESTING("EUDatagrid");
5143  }
5145  /*
5146  * Adaptive Public License
5147  */
5148  if (INFILE(_LT_ADAPTIVE)) {
5149  if (INFILE(_TITLE_ADAPTIVE10)) {
5150  INTERESTING("APL-1.0");
5151  }
5152  else {
5153  INTERESTING("APL");
5154  }
5155  lmem[_fAPL] = 1;
5156  }
5158  /*
5159  * gSOAP Public License
5160  */
5161  if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref13)) {
5162  INTERESTING("gSOAP-1.3b");
5163  }
5164  else if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref)) {
5165  INTERESTING("gSOAP");
5166  }
5168  /*
5169  * Computer Associates
5170  */
5171  if (INFILE(_LT_CA)) {
5172  if (INFILE(_TITLE_CA11)) {
5173  INTERESTING("CATOSL-1.1");
5174  }
5175  else {
5176  INTERESTING("CA");
5177  }
5178  }
5179  else if (INFILE(_TITLE_CA)) {
5180  INTERESTING("CATOSL");
5181  }
5183  /*
5184  * Frameworx
5185  */
5186  if (INFILE(_LT_FRAMEWORX)) {
5187  if (INFILE(_TITLE_FRAMEWORX10)) {
5188  INTERESTING("Frameworx-1.0");
5189  }
5190  else {
5191  INTERESTING("Frameworx");
5192  }
5193  }
5195  /*
5196  * NASA
5197  */
5198  if (INFILE(_LT_NASA)) {
5199  if (INFILE(_TITLE_NASA13)) {
5200  INTERESTING("NASA-1.3");
5201  }
5202  else {
5203  INTERESTING("NASA");
5204  }
5205  }
5207  /*
5208  * Freetype
5209  */
5210  if (INFILE(_LT_FREETYPE)) {
5211  if (INFILE(_TITLE_CATHARON)) {
5212  INTERESTING(lDebug ? "Catharon(1)" : "Catharon");
5213  }
5214  else if (INFILE(_CR_CATHARON)) {
5215  INTERESTING(lDebug ? "Catharon(2)" : "Catharon");
5216  }
5217  else if (INFILE(_TITLE_FREETYPE)) {
5218  INTERESTING("FTL");
5219  }
5220  else {
5221  INTERESTING("FTL-style");
5222  }
5223  }
5224  else if (INFILE(_LT_FTL)) {
5225  INTERESTING("FTL");
5226  }
5227  else if (INFILE(_TITLE_FTL)|| INFILE(_SPDX_FTL)) {
5228  INTERESTING("FTL");
5229  }
5230  else if (INFILE(_LT_CATHARON)) {
5231  INTERESTING(lDebug ? "Catharon(3)" : "Catharon");
5232  }
5233  else if (INFILE(_LT_FREETYPEref)) {
5234  INTERESTING(lDebug ? "FTL(ref)" : "FTL");
5235  }
5237  /*
5238  * Eiffel Forum License
5239  */
5240  if (INFILE(_LT_EIFFEL)) {
5241  if (INFILE(_TITLE_EIFFEL2)) {
5242  INTERESTING("EFL-2.0");
5243  }
5244  else if (INFILE(_TITLE_EIFFEL1)) {
5245  INTERESTING("EFL-1.0");
5246  }
5247  else {
5248  INTERESTING("EFL");
5249  }
5250  }
5251  else if (INFILE(_LT_EIFFEL_20)) {
5252  INTERESTING("EFL-2.0");
5253  }
5254  else if (INFILE(_LT_EIFFEL_1)) {
5255  INTERESTING("EFL");
5256  }
5258  /*
5259  * BISON, Nethack, etc.
5260  */
5261  if (!lmem[_fGPL] && (INFILE(_LT_BISON) || INFILE(_LT_BISONref))) {
5262  if (INFILE(_TITLE_NETHACK)) {
5263  INTERESTING("NGPL");
5264  }
5265  else {
5266  INTERESTING("BISON");
5267  }
5268  }
5270  /*
5271  * Open Software License (OSL) and Academic Free License (AFL) are similar
5272  */
5273  if (INFILE(_LT_OSL_BAD)) {
5274  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5275  INTERESTING(lDebug? "OSL(bad)" : cp);
5276  }
5277  else if (INFILE(_LT_OSLref1)) {
5278  cp = OSLVERS();
5279  INTERESTING(lDebug? "OSL(ref1)" : cp);
5280  }
5281  else if (INFILE(_LT_OSLref2)) {
5282  cp = OSLVERS();
5283  INTERESTING(lDebug? "OSL(ref2)" : cp);
5284  }
5285  else if (INFILE(_LT_AFL)) {
5286  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5287  INTERESTING(lDebug? "AFL#1" : cp);
5288  }
5289  else if (INFILE(_TITLE_OSL21) && NOT_INFILE(_TITLE_OSL21_EXHIBIT)) {
5290  cp = OSLVERS();
5291  INTERESTING(lDebug? "OSL(T2.1)" : cp);
5292  }
5293  else if (INFILE(_TITLE_AFL21)) {
5294  cp = AFLVERS();
5295  INTERESTING(lDebug? "AFL(T2.1)" : cp);
5296  }
5297  else if (INFILE(_TITLE_OSL30) && NOT_INFILE(_TITLE_OSL30_EXHIBIT)) {
5298  cp = OSLVERS();
5299  INTERESTING(lDebug? "OSL(T3.0)" : cp);
5300  }
5301  else if (INFILE(_TITLE_AFL30)) {
5302  cp = AFLVERS();
5303  INTERESTING(lDebug? "AFL(T3.0)" : cp);
5304  }
5305  else if (URL_INFILE(_URL_OSL11)) {
5306  INTERESTING(lDebug ? "OSL_v1.1(url)" : "OSL-1.1");
5307  }
5308  else if (URL_INFILE(_URL_OSL)) {
5309  INTERESTING(lDebug ? "OSL(url)" : "OSL");
5310  }
5311  else if (URL_INFILE(_URL_AFL)) {
5312  INTERESTING(lDebug ? "AFL(url)" : "AFL");
5313  }
5315  /*
5316  * There are occasions where something is licensed under *either* AFL
5317  * or OSL, so don't keep AFL-refs in the if-then-else-if chain here.
5318  */
5319  if (INFILE(_LT_AFLref1)) {
5320  cp = AFLVERS();
5321  INTERESTING(lDebug? "AFL(ref1)" : cp);
5322  }
5323  else if (INFILE(_LT_AFLref2)) {
5324  cp = AFLVERS();
5325  INTERESTING(lDebug? "AFL(ref2)" : cp);
5326  }
5328  /*
5329  * Inner Net license
5330  */
5331  if (INFILE(_LT_INNERNET)) {
5332  if (INFILE(_TITLE_INNERNET200)) {
5333  INTERESTING("InnerNet-2.00");
5334  }
5335  else if (HASTEXT(_TEXT_INNERNET, 0)) {
5336  INTERESTING("InnerNet");
5337  }
5338  else {
5339  INTERESTING("InnerNet-style");
5340  }
5341  }
5342  else if (INFILE(_LT_INNERNETref_V2)) {
5343  INTERESTING(lDebug ? "InnetNet(v2ref)" : "InnerNet-2.00");
5344  }
5346  /*
5347  * Open Government Licence
5348  */
5349  if (INFILE(_TITLE_OGL_UK)) {
5350  if (INFILE(_TITLE_OGL_UK_10)) {
5351  INTERESTING("OGL-UK-1.0");
5352  }
5353  else if (INFILE(_TITLE_OGL_UK_20)) {
5354  INTERESTING("OGL-UK-2.0");
5355  }
5356  else if (INFILE(_TITLE_OGL_UK_30)) {
5357  INTERESTING("OGL-UK-3.0");
5358  }
5359  /* Full OGL license texts have reference to Creative Commons */
5360  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5361  lmem[_fCCBY] = 1;
5362  }
5363  }
5365  /*
5366  * Creative Commons Public License, Mindterm, and the Reciprocal PL
5367  */
5368  if (!lmem[_fCCBY] && HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5369  cp = CCVERS();
5370  INTERESTING(lDebug ? "CC(ref)" : cp);
5371  }
5372  else if (INFILE(_LT_CCPL)) {
5373  if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5374  if (INFILE(_TITLE_RPL15)) {
5375  INTERESTING(lDebug ? "RPL-1.5#1" : "RPL-1.5");
5376  }
5377  else if (INFILE(_TITLE_RPL11)) {
5378  INTERESTING(lDebug ? "RPL-1.1#1" : "RPL-1.1");
5379  }
5380  else if (INFILE(_TITLE_RPL10)) {
5381  INTERESTING(lDebug ? "RPL-1.0#1" : "RPL-1.0");
5382  }
5383  else {
5384  INTERESTING(lDebug ? "RPL#1" : "RPL");
5385  }
5386  }
5387  }
5388  else if (INFILE(_LT_RECIP15)) {
5389  INTERESTING("RPL-1.5");
5390  }
5391  else if (INFILE(_TITLE_MINDTERM)) {
5392  INTERESTING("MindTerm");
5393  }
5394  else if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5395  if (INFILE(_TITLE_RPL15)) {
5396  INTERESTING(lDebug ? "RPL-1.5#2" : "RPL-1.5");
5397  }
5398  else if (INFILE(_TITLE_RPL11)) {
5399  INTERESTING(lDebug ? "RPL-1.1#2" : "RPL-1.1");
5400  }
5401  else if (INFILE(_TITLE_RPL10)) {
5402  INTERESTING(lDebug ? "RPL-1.0#2" : "RPL-1.0");
5403  }
5404  else {
5405  INTERESTING(lDebug ? "RPL#2" : "RPL");
5406  }
5407  }
5408  /*
5409  * For some reason license text strings were defined for few
5410  * Creative Commons licenses.
5411  */
5412  else if (INFILE(_LT_CC_BY_SA_30)) {
5413  INTERESTING("CC-BY-SA-3.0");
5414  }
5415  else if (INFILE(_LT_CC_BY_SA_25)) {
5416  INTERESTING("CC-BY-SA-2.5");
5417  }
5418  else if (INFILE(_LT_CC_BY_NC_30)) {
5419  INTERESTING("CC-BY-NC-3.0");
5420  }
5421  else if (INFILE(_LT_CC_BY_ND_30)) {
5422  INTERESTING("CC-BY-ND-3.0");
5423  }
5425  if (URL_INFILE(_URL_RPL)) {
5426  INTERESTING(lDebug ? "RPL(url)" : "RPL");
5427  }
5428  else if (URL_INFILE(_URL_CCLGPL)) {
5429  cp = LGPLVERS();
5430  INTERESTING(lDebug ? "CC-LGPL(url)" : cp);
5431  }
5432  else if (URL_INFILE(_URL_CCGPL)) {
5433  cp = GPLVERS();
5434  INTERESTING(lDebug ? "CC-GPL(url)" : cp);
5435  }
5437  /*
5438  * SpikeSource
5439  */
5440  if (INFILE(_CR_SPIKESOURCE) && INFILE(_LT_SPIKESOURCE)) {
5441  INTERESTING("SpikeSource");
5442  }
5444  /*
5445  * Legato systems
5446  */
5447  if (INFILE(_LT_LEGATO_1) || INFILE(_LT_LEGATO_2)) {
5448  INTERESTING("Legato");
5449  }
5451  /*
5452  * Paradigm associates
5453  */
5454  if (INFILE(_LT_PARADIGM) && INFILE(_CR_PARADIGM)) {
5455  INTERESTING("Paradigm");
5456  }
5458  /*
5459  * Wintertree Software
5460  */
5461  if (INFILE(_LT_WINTERTREE)) {
5462  INTERESTING("Wintertree");
5463  }
5465  /*
5466  * Genivia
5467  */
5468  if (INFILE(_LT_GENIVIAref)) {
5469  INTERESTING("Genivia.Commercial");
5470  }
5472  /*
5473  * Open Directory License
5474  */
5475  if (INFILE(_LT_ODL)) {
5476  INTERESTING("ODL");
5477  }
5479  /*
5480  * Open Directory License
5481  */
5482  if (INFILE(_LT_OSD)) {
5483  INTERESTING("OSD");
5484  }
5486  /*
5487  * Zveno
5488  */
5489  if (INFILE(_LT_ZVENO) && INFILE(_CR_ZVENO)) {
5490  INTERESTING("Zveno");
5491  }
5493  /*
5494  * Brainstorm
5495  */
5496  if (INFILE(_LT_BRAINSTORM_EULA) && INFILE(_TITLE_BRAINSTORM_EULA)) {
5497  INTERESTING("BrainStorm-EULA");
5498  }
5500  /*
5501  * AOL
5502  */
5503  if (INFILE(_LT_AOL_EULA)) {
5504  INTERESTING("AOL-EULA");
5505  }
5507  /*
5508  * Algorithmics
5509  */
5510  if (INFILE(_LT_ALGORITHMICS)) {
5511  INTERESTING("Algorithmics");
5512  }
5514  /*
5515  * Pixware
5516  */
5517  if (INFILE(_LT_PIXWARE_EULA)) {
5518  INTERESTING("Pixware-EULA");
5519  }
5521  /*
5522  * Compuserve
5523  */
5524  if (HASTEXT(_TEXT_COMPUSERVE, 0) && INFILE(_LT_COMPUSERVE)) {
5525  INTERESTING("CompuServe");
5526  }
5528  /*
5529  * Advanved Micro Devices (AMD)
5530  */
5531  if (INFILE(_CR_AMD) && INFILE(_LT_AMD)) {
5532  INTERESTING("AMD");
5533  }
5534  else if (INFILE(_LT_AMD_EULA) && INFILE(_TITLE_AMD_EULA)) {
5535  INTERESTING("AMD-EULA");
5536  }
5538  /*
5539  * OMRON Corp
5540  */
5541  if ((INFILE(_CR_OMRON_1) || INFILE(_CR_OMRON_2)) &&
5542  (INFILE(_LT_OMRON1) || INFILE(_LT_OMRON2))) {
5543  INTERESTING(lDebug ? "OMRON(2)" : "OMRON");
5544  }
5546  /*
5547  * MetroLink
5548  */
5549  if (INFILE(_TITLE_METROLINK)) {
5550  if (INFILE(_LT_METRO)) {
5551  if (INFILE(_LT_METRO_NONFREE)) {
5552  INTERESTING("MetroLink-nonfree");
5553  }
5554  else {
5555  INTERESTING("MetroLink");
5556  }
5557  }
5558  }
5559  else if (INFILE(_LT_METROLINKref)) {
5560  INTERESTING(lDebug ? "MetroLink(ref)" : "MetroLink");
5561  }
5563  /*
5564  * University of Edinburgh (and a CMU derivative)
5565  */
5566  if (INFILE(_LT_EDINBURGH_1)) {
5567  if (mCR_CMU()) {
5568  INTERESTING(lDebug ? "CMU(3)" : "CMU");
5569  lmem[_mCMU] = 1;
5570  }
5571  else if (mCR_EDIN()) {
5572  INTERESTING(lDebug ? "U-Edinburgh(1)" : "U-Edinburgh");
5573  }
5574  else {
5575  INTERESTING(lDebug ? "UE-style(1)" : "U-Edinburgh-style");
5576  }
5577  }
5578  else if (INFILE(_LT_EDINBURGH_2)) {
5579  if (mCR_EDIN()) {
5580  INTERESTING(lDebug ? "U-Edinburgh(2)" : "U-Edinburgh");
5581  }
5582  else {
5583  INTERESTING(lDebug ? "UE-style(2)" : "U-Edinburgh-style");
5584  }
5585  }
5587  /*
5588  * Older CMU (including the weird "fnord" text) licenses.
5589  * Note that SPDX listed MIT-CMU license is detected earlier.
5590  */
5591  if (!lmem[_mCMU] && INFILE(_LT_CMU_1)) {
5592  if (!lmem[_mREDHAT] && INFILE(_CR_REDHAT)) {
5593  INTERESTING(lDebug ? "RH(5)" : "RedHat");
5594  lmem[_mREDHAT] = 1;
5595  }
5596  else if (INFILE(_CR_NRL)) {
5597  INTERESTING("NRL");
5598  }
5599  else if (!lmem[_mCMU] && mCR_CMU()) {
5600  INTERESTING(lDebug ? "CMU(5)" : "CMU");
5601  lmem[_mCMU] = 1;
5602  }
5603  else {
5604  INTERESTING("CMU-style");
5605  lmem[_mCMU] = 1;
5606  }
5607  }
5608  else if (!lmem[_mCMU] && INFILE(_LT_CMU_2) && mCR_CMU()) {
5609  INTERESTING(lDebug ? "CMU(6)" : "CMU");
5610  lmem[_mCMU] = 1;
5611  }
5612  else if (INFILE(_LT_CMU_3)) {
5613  INTERESTING(lDebug ? "CMU(7)" : "CMU");
5614  lmem[_mCMU] = 1;
5615  }
5616  else if (INFILE(_LT_CMU_4)) {
5617  INTERESTING(lDebug ? "CMU(8)" : "CMU");
5618  lmem[_mCMU] = 1;
5619  }
5620  else if (INFILE(_LT_CMU_5)) {
5621  INTERESTING(lDebug ? "CMU(9)" : "CMU");
5622  lmem[_mCMU] = 1;
5623  }
5624  else if (INFILE(_LT_CMU_6)) {
5625  INTERESTING(lDebug ? "CMU(10)" : "CMU");
5626  lmem[_mCMU] = 1;
5627  }
5629  /*
5630  * University of Chicago
5631  */
5632  if (INFILE(_CR_UCHICAGO) && INFILE(_LT_UCHICAGO)) {
5633  INTERESTING("U-Chicago");
5634  }
5636  /*
5637  * University of Utah
5638  */
5639  if (INFILE(_CR_UUTAH) && INFILE(_LT_UUTAH)) {
5640  INTERESTING("U-Utah");
5641  }
5643  /*
5644  * University of British Columbia
5645  */
5646  if (INFILE(_CR_UBC) && INFILE(_LT_UBC)) {
5647  INTERESTING("U-BC");
5648  }
5650  /*
5651  * ImageMagick Studios - DON'T RECALL THE TEXT FOR THIS LICENSE!
5652  */
5653  if (INFILE(_LT_IMAGEMAGICK)) {
5654  if (INFILE(_CR_IMAGEMAGICK)) {
5655  INTERESTING("ImageMagick");
5656  }
5657  else {
5658  INTERESTING("ImageMagick-style");
5659  }
5660  }
5661  else if (URL_INFILE(_URL_IMAGEMAGICK)) {
5662  INTERESTING(lDebug ? "ImageMagick(url)" : "ImageMagick");
5663  }
5665  /*
5666  * Riverbank
5667  */
5668  if (INFILE(_LT_RIVERBANK) && INFILE(_TITLE_RIVERBANK_EULA)) {
5669  INTERESTING("Riverbank-EULA");
5670  }
5672  /*
5673  * Polyserve
5674  */
5675  if (INFILE(_CR_POLYSERVE) && INFILE(_LT_POLYSERVE)) {
5676  INTERESTING("Polyserve-CONFIDENTIAL");
5677  }
5679  /*
5680  * Fujitsu Limited
5681  */
5682  if (INFILE(_CR_FUJITSU) && INFILE(_LT_FUJITSU)) {
5683  INTERESTING("Fujitsu");
5684  }
5686  /*
5687  * Cypress Semiconductor
5688  */
5689  if (INFILE(_CR_CYPRESS) && INFILE(_LT_CYPRESS)) {
5690  INTERESTING("Cypress-FW");
5691  }
5692  /*
5693  * Keyspan
5694  */
5695  else if (INFILE(_CR_KEYSPAN) && INFILE(_LT_KEYSPAN)) {
5696  INTERESTING("Keyspan-FW");
5697  }
5698  /*
5699  * ATMEL
5700  */
5701  else if (INFILE(_CR_ATMEL) && INFILE(_LT_ATMEL)) {
5702  INTERESTING("ATMEL-FW");
5703  }
5705  /*
5706  * Quest Software
5707  */
5708  if (INFILE(_LT_QUEST_EULA) && INFILE(_TITLE_QUEST_EULA)) {
5709  INTERESTING("Quest-EULA");
5710  }
5712  /*
5713  * International Organization for Standarization
5714  */
5715  if (INFILE(_LT_IOS) && INFILE(_CR_IOS)) {
5716  INTERESTING("IOS");
5717  }
5719  /*
5720  * Garmin Ltd.
5721  */
5722  if (INFILE(_LT_GARMIN_EULA) && INFILE(_TITLE_GARMIN_EULA)) {
5723  INTERESTING("Garmin-EULA");
5724  }
5726  /*
5727  * AVM GmbH
5728  */
5729  if (INFILE(_CR_AVM)) {
5730  if (INFILE(_LT_AVM_1)) {
5731  INTERESTING(lDebug ? "AVM(1)" : "AVM");
5732  }
5733  else if (INFILE(_LT_AVM_2)) {
5734  INTERESTING(lDebug ? "AVM(2)" : "AVM");
5735  }
5736  }
5737  else if (INFILE(_LT_AVM_3)) {
5738  INTERESTING(lDebug ? "AVM(3)" : "AVM");
5739  }
5741  /*
5742  * Fair license
5743  */
5744  if (INFILE(_LT_FAIR)) {
5745  if (INFILE(_TITLE_FAIR)) {
5746  INTERESTING("Fair");
5747  }
5748  else {
5749  INTERESTING("Fair-style");
5750  }
5751  }
5753  /*
5754  * GCA (Majordomo)
5755  */
5756  if (INFILE(_LT_GCA)) {
5757  if (INFILE(_TITLE_MAJORDOMO11)) {
5758  INTERESTING("Majordomo-1.1");
5759  }
5760  else {
5761  INTERESTING("Majordomo");
5762  }
5763  }
5765  /*
5766  * Zeus Technology -- this one is kind of a corner-case since the wording
5767  * is VERY general. If there's a Zeus copyright with the license text,
5768  * spell it out; else, look for the same text in the "generic" section.
5769  */
5770  if (INFILE(_CR_ZEUS) && INFILE(_LT_ZEUS)) {
5771  INTERESTING("Zeus");
5772  }
5774  /*
5775  * Information-technology promotion agency
5776  */
5777  if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_1)) {
5778  if (!lmem[_mOSF] && INFILE(_CR_OSF)) {
5779  INTERESTING(lDebug ? "OSF(2)" : "OSF");
5780  lmem[_mOSF] = 1;
5781  }
5782  else if (INFILE(_CR_UI)) {
5783  INTERESTING(lDebug ? "UI(2)" : "Unix-Intl");
5784  }
5785  else if (INFILE(_CR_XOPEN)) {
5786  INTERESTING(lDebug ? "XOpen(2)" : "X/Open");
5787  lmem[_mXOPEN] = 1;
5788  }
5789  else if (INFILE(_CR_IPA)) {
5790  INTERESTING("IPA");
5791  }
5792  else if (!lmem[_mSUN] && INFILE(_CR_SUN)) {
5793  INTERESTING(lDebug ? "Sun(10)" : "Sun");
5794  lmem[_mSUN] = 1;
5795  }
5796  else {
5797  INTERESTING("X/Open-style");
5798  }
5799  }
5800  /* This one is funky - it includes part of the copyright */
5801  else if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_2)) {
5802  INTERESTING(lDebug ? "XOpen(3)" : "X/Open");
5803  lmem[_mXOPEN] = 1;
5804  }
5806  /*
5807  * Interlink networks EULA (seen in HP proprietary code)
5808  */
5809  if (INFILE(_LT_INTERLINK_EULA) && INFILE(_TITLE_INTERLINK_EULA)) {
5810  INTERESTING("Interlink-EULA");
5811  }
5813  /*
5814  * Mellanox Technologies
5815  */
5816  if (INFILE(_LT_MELLANOX) && INFILE(_CR_MELLANOX)) {
5817  INTERESTING("Mellanox");
5818  }
5820  /*
5821  * nCipher Corp
5822  */
5823  if (INFILE(_LT_NCIPHER) && INFILE(_CR_NCIPHER)) {
5824  INTERESTING("nCipher");
5825  }
5827  /*
5828  * Distributed Processing Technology Corp
5829  */
5830  if (INFILE(_CR_DPTC) && INFILE(_LT_DPTC)) {
5831  INTERESTING("DPTC");
5832  }
5833  /*
5834  * Distributed Management Task Force
5835  */
5836  else if (HASTEXT(_TEXT_REPRODUCED, 0) && INFILE(_CR_DMTF) &&
5837  INFILE(_LT_DMTF)) {
5838  INTERESTING("DMTF");
5839  lmem[_fATTRIB] = 1;
5840  }
5842  /*
5843  * DSC Technologies Corp
5844  */
5845  if (INFILE(_CR_DSCT) && INFILE(_LT_DSCT)) {
5846  INTERESTING("DSCT");
5847  }
5849  /*
5850  * Epinions, Inc.
5851  */
5852  if (INFILE(_CR_EPINIONS) && INFILE(_LT_EPINIONS)) {
5853  INTERESTING("Epinions");
5854  }
5856  /*
5857  * MITEM, Ltd
5858  */
5859  if (INFILE(_CR_MITEM) && INFILE(_LT_MITEM)) {
5860  INTERESTING("MITEM");
5861  }
5863  /*
5864  * Cylink corp
5865  */
5866  if ((INFILE(_LT_CYLINK_ISC_1) || INFILE(_LT_CYLINK_ISC_2))) {
5867  INTERESTING("Cylink-ISC");
5868  }
5870  /*
5871  * SciTech software
5872  */
5873  if (INFILE(_CR_SCITECH) && INFILE(_LT_SCITECH)) {
5874  INTERESTING("SciTech");
5875  }
5877  /*
5878  * OReilly and Associates
5879  */
5880  if (INFILE(_LT_OREILLY_1)) {
5881  if (INFILE(_CR_OREILLY)) {
5882  INTERESTING("OReilly");
5883  }
5884  else {
5885  INTERESTING("OReilly-style");
5886  }
5887  }
5888  else if (INFILE(_LT_OREILLY_2)) {
5889  if (INFILE(_CR_OREILLY)) {
5890  INTERESTING(lDebug ? "OReilly-2" : "OReilly");
5891  }
5892  else {
5893  INTERESTING(lDebug ? "OReilly-st-2" : "OReilly-style");
5894  }
5895  }
5897  /*
5898  * Bit-Torrent
5899  */
5900  if (INFILE(_LT_BITTORRENT)) {
5901  if (INFILE(_TITLE_BITTORRENT11)) {
5902  INTERESTING("BitTorrent-1.1");
5903  }
5904  else if (INFILE(_TITLE_BITTORRENT10)) {
5905  INTERESTING("BitTorrent-1.0");
5906  }
5907  else {
5908  INTERESTING("BitTorrent");
5909  }
5910  }
5911  else if (INFILE(_LT_BITTORRENT_V11)) {
5912  INTERESTING("BitTorrent-1.1");
5913  }
5914  else if (INFILE(_LT_BITTORRENT_V10)) {
5915  INTERESTING("BitTorrent-1.0");
5916  }
5917  else if (INFILE(_LT_BITTORRENTref)) {
5918  INTERESTING(lDebug ? "BitTorrent(ref)" : "BitTorrent");
5919  }
5921  /*
5922  * Open Software Foundation
5923  */
5924  if (INFILE(_LT_OSF_1)) {
5925  if (INFILE(_CR_OSF)) {
5926  INTERESTING(lDebug ? "OSF(3)" : "OSF");
5927  lmem[_mOSF] = 1;
5928  }
5929  else {
5930  INTERESTING(lDebug ? "OSF-style(1)" : "OSF-style");
5931  }
5932  }
5933  else if (INFILE(_LT_OSF_2)) {
5934  if (INFILE(_CR_OSF)) {
5935  INTERESTING(lDebug ? "OSF(4)" : "OSF");
5936  lmem[_mOSF] = 1;
5937  }
5938  else if (INFILE(_LT_CMU_8)) {
5939  INTERESTING(lDebug ? "CMU(11)" : "CMU");
5940  }
5941  else {
5942  INTERESTING(lDebug ? "OSF-style(2)" : "OSF-style");
5943  }
5944  }
5946  /*
5947  * OpenLDAP (if not already determined above -- the OpenLDAP public license
5948  * borrows text from LOTS of different sources)
5949  */
5950  if (!lmem[_fBSD] && lmem[_tOPENLDAP] && !lmem[_fOPENLDAP]) {
5951  if (INFILE(_LT_OPENLDAP_1)) {
5952  if (!TRYGROUP(famOPENLDAP)) {
5953  INTERESTING("OLDAP-style");
5954  }
5955  }
5956  else if (INFILE(_LT_OPENLDAP_2)) {
5957  INTERESTING("OLDAP");
5958  }
5959  }
5961  /*
5962  * The Knuth license is sufficiently bizarre enough it belongs down here,
5963  * towards the end of the search
5964  *****
5965  * Lachman Associates - includes a proprietary-to-the-max paragraph
5966  * IoSoft Ltd.
5967  */
5968  if (INFILE(_CR_KNUTH) && INFILE(_LT_KNUTH_1)) {
5969  INTERESTING(lDebug ? "Knuth(1)" : "D.E.Knuth");
5970  }
5971  else if (INFILE(_LT_KNUTH_2)) {
5972  INTERESTING(lDebug ? "Knuth(2)" : "D.E.Knuth");
5973  }
5974  else if (INFILE(_LT_KNUTH_STYLE)) {
5975  INTERESTING("Knuth-style");
5976  }
5977  else if (INFILE(_LT_LACHMAN_SECRET)) {
5978  INTERESTING("Lachman-Proprietary");
5979  }
5980  else if (INFILE(_LT_IOSOFT_SRCONLY)) {
5981  INTERESTING("IoSoft.COMMERCIAL");
5982  }
5984  /*
5985  * The Free Software License
5986  */
5987  if (INFILE(_LT_FREE_SW)) {
5988  INTERESTING("Free-SW");
5989  }
5990  /*
5991  * NOT free software and explicitly free software
5992  */
5993  else if (INFILE(_PHR_NOT_FREE_SW)) {
5994  if (INFILE(_LT_NOT_FREE) && INFILE(_CR_WTI)) {
5995  INTERESTING("WTI.Not-free");
5996  }
5997  else {
5998  INTERESTING("Not-Free");
5999  }
6000  }
6002  /*
6003  * Code Project Open License
6004  */
6005  if (INFILE(_LT_CPOL)) {
6006  if (HASTEXT(_LT_CPOL_V102, REG_EXTENDED)) {
6007  INTERESTING("CPOL-1.02");
6008  } else {
6009  INTERESTING("CPOL");
6010  }
6011  }
6013  /*
6014  * Macrovision
6015  */
6016  if (INFILE(_LT_MACROV_IA) && INFILE(_PHR_MACROVISION)) {
6017  if (INFILE(_PHR_EULA)) {
6018  INTERESTING("Macrovision-EULA");
6019  }
6020  else {
6021  INTERESTING("Macrovision");
6022  }
6023  }
6025  /*
6026  * VMware
6027  */
6028  if (INFILE(_LT_VMWARE) && INFILE(_TITLE_VMWARE)) {
6029  INTERESTING("VMware-EULA");
6030  }
6032  /*
6033  * UCWARE.com
6034  */
6035  if (INFILE(_LT_UCWARE_EULA_1) || INFILE(_LT_UCWARE_EULA_2)) {
6036  INTERESTING("UCWare-EULA");
6037  }
6039  /*
6040  * InfoSeek Corp
6041  */
6042  if (INFILE(_LT_INFOSEEK) && INFILE(_CR_INFOSEEK)) {
6043  INTERESTING("InfoSeek");
6044  }
6046  /*
6047  * Trident Microsystems
6048  */
6049  if (INFILE(_LT_TRIDENT_EULA) && INFILE(_CR_TRIDENT)) {
6050  INTERESTING("Trident-EULA");
6051  }
6053  /*
6054  * ARJ Software Inc
6055  */
6056  if (INFILE(_LT_ARJ) && INFILE(_CR_ARJ)) {
6057  INTERESTING("ARJ");
6058  }
6060  /*
6061  * Piriform Ltd
6062  */
6063  if (INFILE(_LT_PIRIFORM) && INFILE(_CR_PIRIFORM)) {
6064  INTERESTING("Piriform");
6065  }
6067  /*
6068  * Design Science License (DSL)
6069  */
6070  if (INFILE(_LT_DSL)) {
6071  INTERESTING("DSL");
6072  }
6074  /*
6075  * Skype
6076  */
6077  if (INFILE(_TITLE_SKYPE) && INFILE(_LT_SKYPE)) {
6078  INTERESTING("Skype-EULA");
6079  }
6081  /*
6082  * Hauppauge
6083  */
6084  if (INFILE(_LT_HAUPPAUGE)) {
6085  INTERESTING("Hauppauge");
6086  }
6088  /*
6089  * Platform Computing Corp (or a generic on-your-intranet-only restriction)
6090  */
6091  if (INFILE(_LT_INTRANET_ONLY)) {
6092  if (INFILE(_CR_PLATFORM_COMP)) {
6093  INTERESTING(lDebug ? "Platfm(1)" : "Platform-Computing(RESTRICTED)");
6094  } else {
6095  MEDINTEREST("Intranet-only");
6096  }
6097  } else if (INFILE(_LT_NOT_INTERNET)) {
6098  if (INFILE(_CR_PLATFORM_COMP)) {
6099  INTERESTING(lDebug ? "Platfm(2)" : "Platform-Computing(RESTRICTED)");
6100  } else {
6101  MEDINTEREST("Not-Internet");
6102  }
6103  }
6105  /*
6106  * Curl
6107  */
6108  if (URL_INFILE(_URL_CURL)) {
6109  INTERESTING(lDebug ? "Curl(URL)" : "curl");
6110  }
6112  /*
6113  * ID Software
6114  */
6115  if (INFILE(_LT_ID_EULA)) {
6116  INTERESTING("ID-EULA");
6117  }
6119  /*
6120  * M+ Fonts Project
6121  */
6122  if (INFILE(_LT_MPLUS_FONT) && INFILE(_CR_MPLUS)) {
6123  INTERESTING("M-Plus-Project");
6124  }
6126  /*
6127  * Powder Development
6128  */
6129  if (INFILE(_LT_POWDER)) {
6130  INTERESTING("Powder-Proprietary");
6131  }
6133  /*
6134  * Against DRM
6135  */
6136  if (INFILE(_LT_AGAINST_DRM)) {
6137  INTERESTING("AgainstDRM");
6138  }
6140  /*
6141  * The TeXinfo exception clause
6142  */
6143  if (INFILE(_LT_TEX_EXCEPT)) {
6144  INTERESTING(lDebug ? "TeX-except" : "TeX-exception");
6145  }
6147  /*
6148  * The U.S. Gummint
6149  */
6150  if (INFILE(_LT_USGOVT_1)) {
6151  if (INFILE(_CR_URA)) {
6152  MEDINTEREST("URA.govt");
6153  }
6154  else {
6155  MEDINTEREST(lDebug ? "Govt-Wk(1)" : "Govt-work");
6156  }
6157  }
6158  else if (INFILE(_LT_USGOVT_2)) {
6159  /*
6160  * mpich2
6161  */
6162  if (INFILE(_LT_MPICH2)) {
6163  INTERESTING("mpich2");
6164  }
6165  else {
6166  MEDINTEREST(lDebug ? "Govt-Wk(2)" : "Govt-work");
6167  }
6168  }
6169  else if (INFILE(_LT_USGOVT_RIGHTS1) && INFILE(_LT_PUBLIC)) {
6170  MEDINTEREST(lDebug ? "US-Govt(1)" : "Govt-rights");
6171  }
6172  else if (INFILE(_LT_USGOVT_RIGHTS2)) {
6173  MEDINTEREST(lDebug ? "US-Govt(2)" : "Govt-rights");
6174  }
6176  /*
6177  * AACA (Ada Conformity Assessment Authority)
6178  */
6179  if (INFILE(_LT_ACAA_RIGHTS) && INFILE(_LT_PUBLIC)) {
6180  INTERESTING("ACAA");
6181  }
6183  /*
6184  * Zend Engine License
6185  */
6186  if (INFILE(_LT_ZEND_1) || URL_INFILE(_URL_ZEND)) {
6187  INTERESTING("Zend-2.0");
6188  }
6189  else if (INFILE(_LT_ZEND_2)) {
6190  INTERESTING("Zend-1.0");
6191  }
6193  /*
6194  * WebM
6195  * Changed to BSD-3-Clause, WebM is not OSI nor SPDX recognized license
6196  */
6197  if (URL_INFILE(_URL_WEBM)) {
6198  INTERESTING(lDebug ? "WebM" : "BSD-3-Clause");
6199  }
6201  /* Dyade Public License
6202  * http://old.koalateam.com/jackaroo/DYADE_PUBLIC_LICENSE.TXT
6203  */
6204  if (INFILE(_LT_DYADE) && INFILE(_LT_DYADE_2))
6205  {
6206  INTERESTING("Dyade");
6207  }
6208  /*
6209  * Zimbra
6210  */
6211  if (INFILE(_TITLE_ZIMBRA_13)) {
6212  INTERESTING("Zimbra-1.3");
6213  }
6214  else if (INFILE(_TITLE_ZIMBRA_12)) {
6215  INTERESTING("Zimbra-1.2");
6216  }
6217  else if (INFILE(_TITLE_ZIMBRA)) {
6218  INTERESTING("Zimbra");
6219  }
6221  /*
6222  * Open Database
6223  */
6224  if (INFILE(_TITLE_ODBL)) {
6225  INTERESTING("ODbL-1.0");
6226  lmem[_fODBL] = 1;
6227  }
6229  /*
6230  * Multics
6231  */
6232  if (INFILE(_LT_MULTICS)) {
6233  INTERESTING("Multics");
6234  }
6236  /*
6237  * H2
6238  * Note, H2 title is also checked in MPL section
6239  */
6240  if (INFILE(_TITLE_H2_V10)) {
6241  INTERESTING("H2-1.0");
6242  }
6244  /*
6245  * CRYPTOGAMS
6246  */
6247  if (INFILE(_LT_CRYPTOGAMS)) {
6248  INTERESTING("Cryptogams");
6249  }
6251  /*
6252  * Cygnus-eCos-1.0
6253  * Note, Cygnus-eCos title is also checked in MPL section
6254  */
6255  if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
6256  INTERESTING("Cygnus-eCos-1.0");
6257  }
6259  /*
6260  * RHeCos-1.1
6261  * Note, RHeCos-1.1 title is also checked in MPL section
6262  */
6263  if (INFILE(_TITLE_RHeCos_V11)) {
6264  INTERESTING("RHeCos-1.1");
6265  }
6267  /*
6268  * TMate
6269  * Note, TMate is also recognized with BSD-2-Clause detection
6270  */
6271  if (INFILE(_TITLE_TMATE)) {
6272  INTERESTING("TMate");
6273  }
6275  /*
6276  * Abstyles
6277  */
6278  if (INFILE(_LT_ABSTYLES_1) && INFILE(_LT_ABSTYLES_2)) {
6279  INTERESTING("Abstyles");
6280  }
6282  /*
6283  * Amazon Digital Services License
6284  */
6285  if (INFILE(_LT_ADSL) && INFILE(_CR_AMAZON)) {
6286  INTERESTING("ADSL");
6287  }
6289  /*
6290  * CrystalStacker License
6291  */
6292  if (HASTEXT(_LT_CRYSTALSTACKER, REG_EXTENDED)) {
6293  INTERESTING("CrystalStacker");
6294  }
6296  /*
6297  * 3GPP
6298  */
6299  if (INFILE(_LT_3GPP)) {
6300  INTERESTING("3GPP");
6301  }
6303  /*
6304  * ITU-T
6305  */
6306  if (INFILE(_LT_ITU_T_1) || INFILE(_LT_ITU_T_2) || HASTEXT(_TITLE_ITU_T, 0)) {
6307  INTERESTING("ITU-T");
6308  }
6310  /*
6311  * Sun Public License
6312  */
6313  if (!lmem[_mSUN] && !lmem[_mMPL]) {
6314  if (INFILE(_TITLE_SUN_PL10)) {
6315  INTERESTING("SPL-1.0");
6316  }
6317  else if (!lmem[_fREAL] && INFILE(_TITLE_SUN_PL)) {
6318  INTERESTING("SPL");
6319  }
6320  }
6322  /*
6323  * libtiff, note that license text is detected earlier
6324  */
6325  if (INFILE(_PHR_LIBTIFF)) {
6326  INTERESTING("libtiff");
6327  }
6329  /*
6330  * Imlib2
6331  */
6332  if (INFILE(_PHR_Imlib2)) {
6333  INTERESTING("Imlib2");
6334  }
6336  /*
6337  * Wide Open License (WOL)
6338  */
6339  if (INFILE(_TITLE_WOL) || INFILE(_URL_WOL)) {
6340  INTERESTING("WOL");
6341  }
6343  /*
6344  * naist-2003
6345  */
6346  if (INFILE(_LT_NAIST_2003) && HASTEXT(_TEXT_NAIST, 0)) {
6347  INTERESTING("naist-2003");
6348  }
6350  /*
6351  * EDL-1.0
6352  */
6353  if (INFILE(_TITLE_EDL_V10)) {
6354  INTERESTING("EDL-1.0");
6355  }
6357  /*
6358  * HSQLDB
6359  */
6360  if (INFILE(_LT_HSQLDB_1) || INFILE(_LT_HSQLDB_2) || INFILE(_LT_HSQLDB_3)) {
6361  INTERESTING("HSQLDB");
6362  }
6364  /*
6365  * Sony Computer Entertainment (SCEA) Shared Source License
6366  */
6367  if (INFILE(_TITLE_SCEA)) {
6368  INTERESTING("SCEA");
6369  }
6371  /*
6372  * OpenMap
6373  */
6374  if (INFILE(_TITLE_OPENMAP)) {
6375  INTERESTING("OpenMap");
6376  lmem[_fPDDL] = 1;
6377  }
6379  /*
6380  * ICU 1.8.1
6381  */
6382  if (INFILE(_LT_ICU_1) || INFILE(_TITLE_ICU) || INFILE(_SPDX_ICU)) {
6383  INTERESTING("ICU");
6384  }
6385  else if (INFILE(_PHR_ICU_1)) {
6386  INTERESTING("ICU");
6387  }
6389  /*
6390  * Ubuntu Font License
6391  */
6392  if (INFILE(_TITLE_UBUNTU_FONT)) {
6393  INTERESTING("ubuntu-font-1.0");
6394  lmem[_fPDDL] = 1;
6395  }
6397  /*
6398  * ODC Attribution License
6399  */
6400  if (INFILE(_LT_ODC)) {
6401  INTERESTING("ODC-By-1.0");
6402  pd = 0;
6403  }
6405  /*
6406  * Community Data License Agreement
6407  */
6408  if (INFILE(_TITLE_CDLA_Permissive_10)) {
6409  INTERESTING("CDLA-Permissive-1.0");
6410  }
6411  else if (INFILE(_TITLE_CDLA_Sharing_10)) {
6412  INTERESTING("CDLA-Sharing-1.0");
6413  }
6415  /*
6416  * Toolbar2000
6417  */
6418  if (INFILE(_TITLE_Toolbar2000) || INFILE(_URL_Toolbar2000)) {
6419  INTERESTING("Toolbar2000");
6420  }
6422  /*
6423  * unboundID-ldap-sdk
6424  */
6425  if (INFILE(_TITLE_unboundID_ldap_sdk) || INFILE(_LT_unboundID_ldap_sdk)) {
6426  INTERESTING("unboundID-ldap-sdk");
6427  }
6429  /*
6430  * BlueOak-1.0.0
6431  */
6432  if (INFILE(_TITLE_BlueOak_100) || URL_INFILE(_URL_BlueOak_100)) {
6433  INTERESTING("BlueOak-1.0.0");
6434  }
6435  else if (INFILE(_LT_BlueOak_100_Purpose) && INFILE(_LT_BlueOak_100_Acceptance)) {
6436  INTERESTING("BlueOak-1.0.0");
6437  }
6439  /*
6440  * CERN-OHL
6441  */
6442  if (INFILE(_TITLE_CERN_OHL_11)) {
6443  INTERESTING("CERN-OHL-1.1");
6444  }
6445  else if (INFILE(_TITLE_CERN_OHL_12)) {
6446  INTERESTING("CERN-OHL-1.2");
6447  }
6449  /*
6450  * MulanPSL
6451  */
6452  if (INFILE(_TITLE_MulanPSL_10) || URL_INFILE(_URL_MulanPSL) || INFILE(_LT_MulanPSL_10)) {
6453  INTERESTING("MulanPSL-1.0");
6454  }
6456  /*
6457  * SSH
6458  */
6459  if (INFILE(_LT_FREE_72) && HASTEXT(_LT_SSH, REG_EXTENDED)) {
6460  if (INFILE(_LT_SSH_OpenSSH)) {
6461  INTERESTING("SSH-OpenSSH");
6462  }
6463  else {
6464  INTERESTING("SSH-short");
6465  }
6466  }
6468 
6469  SPDXREF();
6471  EXCEPTIONS();
6473 
6474  /*
6475  * The Stallman paper "Why Software Should Be Free" is a red-herring.
6476  * His 1986 interview in Byte magazine also is, too.
6477  */
6478  if ((INFILE(_TITLE_RMS_WSSBF) && INFILE(_PHR_RMS1) &&
6479  INFILE(_PHR_RMS2)) || INFILE(_TITLE_RMS_BYTE86)) {
6480  if (lDiags) {
6481  printf("... RMS propaganda\n");
6482  }
6483  lmem[_fDOC] = 1;
6484  }
6486  /*
6487  * If there's a no-warranty statement in the file, remember the regex.
6488  * Ditto for phrase stating restrictions.
6489  */
6490  if (maxInterest != IL_HIGH) {
6491  for (i = 0; i < NNOWARRANTY; i++) {
6492  if (INFILE((j = _NO_WARRANTY_first+i))) {
6493  nw = j;
6494  break;
6495  }
6496  }
6497  }
6498  addLicence(cur.theMatches,"NoWarranty");
6499 
6500  /*
6501  * Statements about IP (Intellectual Property) rights
6502  */
6503  if (!lmem[_fIP] && INFILE(_LT_GEN_IP_1)) {
6504  INTERESTING(lDebug ? "IP(1)" : "IP-claim");
6505  }
6506  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_2) && NOT_INFILE(_TITLE_MIROS)) {
6507  INTERESTING(lDebug ? "IP(2)" : "IP-claim");
6508  }
6509  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_3)) {
6510  INTERESTING(lDebug ? "IP(3)" : "IP-claim");
6511  }
6513  /*
6514  * Dual licenses
6515  */
6516  if (INFILE(_LT_DUAL_LICENSE_0) && NOT_INFILE(_TITLE_NOSL)) {
6517  MEDINTEREST(lDebug ? "Dual-license(0)" : "Dual-license");
6518  }
6519  else if (INFILE(_LT_DUAL_LICENSE_22)) {
6520  MEDINTEREST(lDebug ? "Dual-license(22)" : "Dual-license");
6521  }
6522  else if (INFILE(_LT_DUAL_LICENSE_1) && NOT_INFILE(_TITLE_NOSL)) {
6523  MEDINTEREST(lDebug ? "Dual-license(1)" : "Dual-license");
6524  }
6525  else if (INFILE(_LT_DUAL_LICENSE_2)) {
6526  MEDINTEREST(lDebug ? "Dual-license(2)" : "Dual-license");
6527  }
6528  else if (INFILE(_LT_DUAL_LICENSE_3) && NOT_INFILE(_LT_DUAL_LICENSE_3_EXHIBIT)) {
6529  MEDINTEREST(lDebug ? "Dual-license(3)" : "Dual-license");
6530  }
6531  else if (INFILE(_LT_DUAL_LICENSE_4)) {
6532  MEDINTEREST(lDebug ? "Dual-license(4)" : "Dual-license");
6533  }
6534  else if (INFILE(_LT_DUAL_LICENSE_5)) {
6535  MEDINTEREST(lDebug ? "Dual-license(5)" : "Dual-license");
6536  }
6537  else if (INFILE(_LT_DUAL_LICENSE_6)) {
6538  MEDINTEREST(lDebug ? "Dual-license(6)" : "Dual-license");
6539  }
6540  else if (INFILE(_LT_DUAL_LICENSE_7)) {
6541  MEDINTEREST(lDebug ? "Dual-license(7)" : "Dual-license");
6542  }
6543  else if (INFILE(_LT_DUAL_LICENSE_8)) {
6544  MEDINTEREST(lDebug ? "Dual-license(8)" : "Dual-license");
6545  }
6546  else if (INFILE(_LT_DUAL_LICENSE_9)) {
6547  MEDINTEREST(lDebug ? "Dual-license(9)" : "Dual-license");
6548  }
6549  else if (INFILE(_LT_DUAL_LICENSE_10)) {
6550  MEDINTEREST(lDebug ? "Dual-license(10)" : "Dual-license");
6551  }
6552  else if (INFILE(_LT_DUAL_LICENSE_11)) {
6553  MEDINTEREST(lDebug ? "Dual-license(11)" : "Dual-license");
6554  }
6555  else if (INFILE(_LT_DUAL_LICENSE_12)) {
6556  MEDINTEREST(lDebug ? "Dual-license(12)" : "Dual-license");
6557  }
6558  else if (INFILE(_LT_DUAL_LICENSE_13)) {
6559  INTERESTING(lDebug ? "Dual-license(13)" : "Dual-license");
6560  INTERESTING("BSD");
6561  INTERESTING("MIT");
6562  /*
6563  * A special case for NomosTestfiles/Dual-license/respond.js
6564  * that has two dual-license statements.
6565  */
6566  if (!lmem[_mGPL]) {
6567  if (INFILE(_LT_DUAL_LICENSE_16)) {
6568  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6569  }
6570  }
6571  }
6572  else if (INFILE(_LT_DUAL_LICENSE_14)) {
6573  INTERESTING(lDebug ? "Dual-license(14)" : "Dual-license");
6574  INTERESTING("BSD");
6575  if (!lmem[_mGPL]) {
6576  INTERESTING("GPL");
6577  }
6578  }
6579  else if (INFILE(_LT_DUAL_LICENSE_15)) {
6580  MEDINTEREST(lDebug ? "Dual-license(15)" : "Dual-license");
6581  }
6582  else if (INFILE(_LT_DUAL_LICENSE_16)) {
6583  INTERESTING(lDebug ? "Dual-license(16)" : "Dual-license");
6584  INTERESTING("MIT");
6585  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6586  }
6587  else if (INFILE(_LT_DUAL_LICENSE_17)) {
6588  MEDINTEREST(lDebug ? "Dual-license(17)" : "Dual-license");
6589  }
6590  else if (INFILE(_LT_DUAL_LICENSE_18)) {
6591  MEDINTEREST(lDebug ? "Dual-license(18)" : "Dual-license");
6592  }
6593  else if (INFILE(_LT_DUAL_LICENSE_19)) {
6594  MEDINTEREST(lDebug ? "Dual-license(19)" : "Dual-license");
6595  }
6596  else if (INFILE(_LT_DUAL_LICENSE_20)) {
6597  MEDINTEREST(lDebug ? "Dual-license(20)" : "Dual-license");
6598  }
6599  else if (INFILE(_LT_DUAL_LICENSE_21)) {
6600  MEDINTEREST(lDebug ? "Dual-license(21)" : "Dual-license");
6601  }
6602  else if (INFILE(_LT_DUAL_LICENSE_23)) {
6603  MEDINTEREST(lDebug ? "Dual-license(23)" : "Dual-license");
6604  }
6605  else if (INFILE(_LT_DUAL_LICENSE_24)) {
6606  MEDINTEREST(lDebug ? "Dual-license(24)" : "Dual-license");
6607  }
6608  else if (INFILE(_LT_DUAL_LICENSE_25)) {
6609  MEDINTEREST(lDebug ? "Dual-license(25)" : "Dual-license");
6610  }
6611  else if (INFILE(_LT_DUAL_LICENSE_26)) {
6612  MEDINTEREST(lDebug ? "Dual-license(26)" : "Dual-license");
6613  }
6614  else if (INFILE(_LT_DUAL_LICENSE_27)) {
6615  MEDINTEREST(lDebug ? "Dual-license(27)" : "Dual-license");
6616  }
6617  else if (INFILE(_LT_DUAL_LICENSE_28)) {
6618  MEDINTEREST(lDebug ? "Dual-license(28)" : "Dual-license");
6619  }
6620  else if (INFILE(_LT_DUAL_LICENSE_29) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6621  MEDINTEREST(lDebug ? "Dual-license(29)" : "Dual-license");
6622  }
6623  else if (INFILE(_LT_DUAL_LICENSE_30)) {
6624  MEDINTEREST(lDebug ? "Dual-license(30)" : "Dual-license");
6625  }
6626  else if (INFILE(_LT_DUAL_LICENSE_31)) {
6627  MEDINTEREST(lDebug ? "Dual-license(31)" : "Dual-license");
6628  }
6629  else if (INFILE(_LT_DUAL_LICENSE_32)) {
6630  MEDINTEREST(lDebug ? "Dual-license(32)" : "Dual-license");
6631  }
6632  else if (INFILE(_LT_DUAL_LICENSE_33)) {
6633  MEDINTEREST(lDebug ? "Dual-license(33)" : "Dual-license");
6634  }
6635  else if (INFILE(_LT_DUAL_LICENSE_34)) {
6636  MEDINTEREST(lDebug ? "Dual-license(34)" : "Dual-license");
6637  }
6638  else if (HASTEXT(_LT_DUAL_LICENSE_35, 0)) {
6639  MEDINTEREST(lDebug ? "Dual-license(35)" : "Dual-license");
6640  /*
6641  * GPL is not detected correctly in this case, therefore it is set here.
6642  */
6643  INTERESTING("GPL");
6644  }
6645  else if (INFILE(_LT_DUAL_LICENSE_36)) {
6646  MEDINTEREST(lDebug ? "Dual-license(36)" : "Dual-license");
6647  }
6648  else if (INFILE(_LT_DUAL_LICENSE_37)) {
6649  MEDINTEREST(lDebug ? "Dual-license(37)" : "Dual-license");
6650  }
6651  else if (INFILE(_LT_DUAL_LICENSE_38)) {
6652  MEDINTEREST(lDebug ? "Dual-license(38)" : "Dual-license");
6653  }
6654  else if (INFILE(_LT_DUAL_LICENSE_39)) {
6655  MEDINTEREST(lDebug ? "Dual-license(39)" : "Dual-license");
6656  }
6657  else if (INFILE(_LT_DUAL_LICENSE_40)) {
6658  MEDINTEREST(lDebug ? "Dual-license(40)" : "Dual-license");
6659  }
6660  else if (INFILE(_LT_DUAL_LICENSE_41)) {
6661  MEDINTEREST(lDebug ? "Dual-license(41)" : "Dual-license");
6662  }
6663  else if (INFILE(_LT_DUAL_LICENSE_42)) {
6664  MEDINTEREST(lDebug ? "Dual-license(42)" : "Dual-license");
6665  }
6666  else if (INFILE(_LT_DUAL_LICENSE_43)) {
6667  MEDINTEREST(lDebug ? "Dual-license(43)" : "Dual-license");
6668  }
6669  else if (HASTEXT(_LT_DUAL_LICENSE_44, 0)) {
6670  MEDINTEREST(lDebug ? "Dual-license(44)" : "Dual-license");
6671  }
6672  else if (INFILE(_LT_DUAL_LICENSE_45)) {
6673  MEDINTEREST(lDebug ? "Dual-license(45)" : "Dual-license");
6674  INTERESTING("MIT");
6675  }
6676  else if (HASTEXT(_LT_DUAL_LICENSE_46, REG_EXTENDED)) {
6677  MEDINTEREST(lDebug ? "Dual-license(46)" : "Dual-license");
6678  }
6679  else if (HASTEXT(_LT_DUAL_LICENSE_47, REG_EXTENDED) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6680  MEDINTEREST(lDebug ? "Dual-license(47)" : "Dual-license");
6681  }
6682  else if (INFILE(_LT_DUAL_LICENSE_48)) {
6683  MEDINTEREST(lDebug ? "Dual-license(48)" : "Dual-license");
6684  }
6685  else if (HASTEXT(_LT_DUAL_LICENSE_49, REG_EXTENDED)) {
6686  MEDINTEREST(lDebug ? "Dual-license(49)" : "Dual-license");
6687  }
6689  /*
6690  * The Beer-ware license(!)
6691  */
6692  if (INFILE(_LT_BEERWARE)) {
6693  INTERESTING("Beerware");
6694  }
6696  /*
6697  * CMake license
6698  */
6699  if (URL_INFILE(_URL_CMAKE)) {
6700  INTERESTING("CMake");
6701  }
6703  /*
6704  * unRAR restriction
6705  */
6706  if (INFILE(_LT_UNRARref1) || INFILE(_LT_UNRARref2)) {
6707  INTERESTING("unRAR restriction");
6708  }
6710  /*
6711  * ANTLR Software Rights Notice
6712  */
6713  if (INFILE(_LT_ANTLR)) {
6714  INTERESTING("ANTLR-PD");
6715  lmem[_fANTLR] = 1;
6716  }
6718  /*
6719  * Creative Commons Zero v1.0 Universal
6720  */
6721  if (INFILE(_SPDX_CC0_10)) {
6722  INTERESTING("CC0-1.0");
6723  }
6724  else if (INFILE(_TITLE_CC0_10_1) || INFILE(_PHR_CC0_1) || INFILE(_PHR_CC0_2)) {
6725  INTERESTING("CC0-1.0");
6726  }
6727  else if (INFILE(_SPDX_CC0)) {
6728  INTERESTING("CC0");
6729  }
6731  /*
6732  * PA Font License (IPA)
6733  */
6734  if (INFILE(_TITLE_IPA)) {
6735  INTERESTING("IPA");
6736  }
6738  /*
6739  * European Union Public Licence
6740  */
6741  if (INFILE(_PHR_EUPL_10) || INFILE(_TITLE_EUPL_10)) {
6742  INTERESTING("EUPL-1.0");
6743  }
6744  else if (INFILE(_PHR_EUPL_11) || INFILE(_TITLE_EUPL_11)) {
6745  INTERESTING("EUPL-1.1");
6746  }
6747  else if (INFILE(_TITLE_EUPL_12)) {
6748  INTERESTING("EUPL-1.2");
6749  }
6750  else if (INFILE(_PHR_EUPL)) {
6751  INTERESTING("EUPL");
6752  }
6754  /* University of Illinois/NCSA Open Source License */
6755  if (!lmem[_fNCSA] && INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
6756  INTERESTING(lDebug ? "NCSA(2)" : "NCSA");
6757  /* OZPLB-1.1 refers both to NCSA and OZPLB-1.1 licenses */
6758  if (INFILE(_TITLE_OZPLB_11)) {
6759  INTERESTING("OZPLB-1.1");
6760  }
6761  lmem[_fBSD] = 1;
6762  lmem[_mMIT] = 1;
6763  }
6765  /* ODC Public Domain Dedication & License 1.0 */
6766  if (INFILE(_TITLE_PDDL)) {
6767  INTERESTING("PDDL-1.0");
6768  lmem[_fPDDL] = 1;
6769  }
6771  /* PostgreSQL License */
6772  if (INFILE(_TITLE_POSTGRES) || INFILE(_TITLE_POSTGRES_1)) {
6773  INTERESTING("PostgreSQL");
6774  lmem[_fBSD] = 1;
6775  }
6777  /* Sax Public Domain Notice */
6778  if (INFILE(_LT_SAX_PD)) {
6779  INTERESTING("SAX-PD");
6780  lmem[_fSAX] = 1;
6781  }
6783  /*
6784  * WTF Public "license"
6785  */
6786  if (INFILE(_LT_WTFPL)) {
6787  INTERESTING("WTFPL");
6788  }
6789  else if (INFILE(_LT_WTFPLref)) {
6790  INTERESTING(lDebug ? "WTFPL(ref)" : "WTFPL");
6791  }
6792  else if (INFILE(_LT_WTFPLref_1)) {
6793  INTERESTING(lDebug ? "WTFPL(ref#1)" : "WTFPL");
6794  }
6795  else if (INFILE(_PHR_WTFPL)) {
6796  INTERESTING(lDebug ? "WTFPL(phr)" : "WTFPL");
6797  }
6799  /* Independent JPEG Group License */
6800  if (!lmem[_fIJG]) {
6801  if (HASTEXT(_PHR_IJG_1, REG_EXTENDED)) {
6802  INTERESTING("IJG");
6803  }
6804  else if (HASTEXT(_PHR_IJG_2, 0)) {
6805  INTERESTING("IJG");
6806  }
6807  else if (HASTEXT(_TITLE_IJG_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6808  INTERESTING("IJG");
6809  }
6810  /* Independent JPEG Group can be referenced without IJG license*/
6811  else if (HASTEXT(_TITLE_IJG_2, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6812  INTERESTING("IJG-possibility");
6813  }
6815  }
6816  /* Netizen Open Source License */
6817  if (!lmem[_mMPL] && INFILE(_TITLE_NOSL)) {
6818  INTERESTING(lDebug ? "NOSL(#2)" : "NOSL");
6819  }
6821  /* Net Boolean Public License v1 */
6822  if (INFILE(_TITLE_NBPL_V10)) {
6823  INTERESTING("NBPL-1.0");
6824  }
6826  /* Flora License */
6827  if (INFILE(_TITLE_Flora_V10)) {
6828  INTERESTING("Flora-1.0");
6829  }
6830  else if (INFILE(_TITLE_Flora_V11)) {
6831  INTERESTING("Flora-1.1");
6832  }
6833  else if (URL_INFILE(_URL_Flora)) {
6834  INTERESTING("Flora");
6835  }
6837  /* Standard ML of New Jersey License */
6838  if (INFILE(_TITLE_SMLNJ)) {
6839  INTERESTING("SMLNJ");
6840  }
6842  /* Mozilla Public License possibility */
6843  if (!lmem[_mMPL] && INFILE(_TEXT_MPLV2) && INFILE(_URL_MPL20)) {
6844  INTERESTING("MPL-2.0");
6845  lmem[_mMPL] = 1;
6846  }
6847  else if (!lmem[_mMPL] && URL_INFILE(_URL_MPL_LATEST)) {
6848  INTERESTING(lDebug ? "MPL(latest)" : "MPL");
6849  }
6851  /* Citrix License */
6852  if (INFILE(_TITLE_CITRIX)) {
6853  INTERESTING("Citrix");
6854  lmem[_fCITRIX] = 1;
6855  }
6857  /* CUA office public license */
6858  if (INFILE(_TITLE_CUA10)) {
6859  INTERESTING("CUA-OPL-1.0");
6860  }
6862  /* the Erlang Public License */
6863  if (INFILE(_TITLE_ERLPL_ref)) {
6864  INTERESTING("ErlPL-1.1");
6865  }
6867  /* German Free Software License */
6868  if (INFILE(_TITLE_D_FSL_10) || INFILE(_TITLE_D_FSL_DE1_10) || INFILE(_TITLE_D_FSL_DE2_10) || INFILE(_TITLE_D_FSL_DE3_10) || INFILE(_TITLE_D_FSL_DE4_10))
6869  {
6870  INTERESTING("D-FSL-1.0");
6871  lmem[_mGPL] = 1;
6872  }
6874  /* CCLRC License */
6875  if (INFILE(_TITLE_CCLRC)) {
6876  INTERESTING("CCLRC");
6877  }
6879 
6880  /* Some GPL cases are still missing */
6881  if (!lmem[_mGPL] && (INFILE(_LT_GPL_V2_ref) || INFILE(_LT_GPL_V2_ref1) || INFILE(_LT_GPL_V2_ref2) || INFILE(_LT_GPL_V2_ref3) || INFILE(_LT_GPL_V2_ref4)))
6882  {
6883  INTERESTING(lDebug ? "GPL_V2_ref" : "GPL-2.0-only");
6884  lmem[_mGPL] = 1;
6885  }
6886  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_ref))
6887  {
6888  INTERESTING(lDebug ? "GPL_V3_ref" : "GPL-3.0-only");
6889  lmem[_mGPL] = 1;
6890  }
6891  else if (!lmem[_mGPL] && INFILE(_LT_GPLref22))
6892  {
6893  INTERESTING(lDebug ? "GPLref22" : "GPL");
6894  lmem[_mGPL] = 1;
6895  }
6896  else if (!lmem[_mGPL] && NOT_INFILE(_LT_IGNORE_CLAUSE_2) && INFILE(_LT_GPLref21))
6897  {
6898  INTERESTING(lDebug ? "GPLref21" : "GPL");
6899  lmem[_mGPL] = 1;
6900  }
6902 
6903  /* MX4J License version 1.0 */
6904  if (INFILE(_LT_MX4J_V10))
6905  {
6906  INTERESTING("MX4J-1.0");
6907  }
6908  else if (INFILE(_LT_MX4J))
6909  {
6910  INTERESTING("MX4J");
6911  }
6913  /* postfix license */
6914  if (INFILE(_TITLE_POSTFIX))
6915  {
6916  INTERESTING("Postfix");
6917  }
6919  /* not public domain */
6920  if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
6921  if (INFILE(_LT_PUBDOM_CC)) {
6922  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
6923  pd = 1;
6924  }
6925  else {
6926  INTERESTING(LS_NOT_PD);
6927  pd = 0;
6928  }
6929  }
6931  /* LIBGCJ license */
6932  if (INFILE(_LT_LIBGCJ))
6933  {
6934  INTERESTING("LIBGCJ");
6935  }
6937  /* open cascade technology public license */
6938  if (INFILE(_TITLE_OPEN_CASCADE))
6939  {
6940  INTERESTING("OpenCASCADE-PL");
6941  }
6943  /* KnowledgeTree Public License */
6944  if (INFILE(_LT_KnowledgeTree_V11))
6945  {
6946  INTERESTING("KnowledgeTree-1.1");
6947  }
6949  /* Interbase Public License */
6950  if (INFILE(_LT_Interbase_V10))
6951  {
6952  INTERESTING("Interbase-1.0");
6953  }
6955  /* ClearSilver license */
6956  if (INFILE(_LT_ClearSilver))
6957  {
6958  INTERESTING("ClearSilver");
6959  }
6961  /* ACE, TAO, CIAO */
6962  if(INFILE(_LT_ACE)) {
6963  INTERESTING("ACE");
6964  }
6965  else if(INFILE(_LT_FACE)) {
6966  INTERESTING("FaCE");
6967  }
6969  /* JISP */
6970  if(INFILE(_LT_JISP)) {
6971  INTERESTING("JISP");
6972  }
6974  /* Qmail */
6975  if(INFILE(_LT_QMAIL)) {
6976  INTERESTING("Qmail");
6977  }
6979  /* Migemo */
6980  if(INFILE(_LT_MIGEMO)) {
6981  INTERESTING("Migemo");
6982  }
6984  /* Sendmail */
6985  if(INFILE(_LT_Sendmail_title) ) {
6986  INTERESTING("Sendmail");
6987  }
6989  /* Giftware */
6990  if(INFILE(_LT_GIFTWARE)) {
6991  INTERESTING("Giftware");
6992  }
6994  /* Logica opensource */
6995  if(INFILE(_LT_LOGICA)) {
6996  INTERESTING("Logica-OSL-1.0");
6997  }
6999  /* Unidex */
7000  if(INFILE(_LT_UNIDEX)) {
7001  INTERESTING("Unidex");
7002  }
7004  /* TCL License */
7005  if (!lmem[_fTCL]) {
7006  if (INFILE(_TITLE_TCL)) {
7007  INTERESTING("TCL");
7008  }
7009  else if (INFILE(_SPDX_TCL)) {
7010  INTERESTING("TCL");
7011  }
7012  else if (INFILE(_LT_TCL)) {
7013  INTERESTING("TCL");
7014  }
7015  }
7017  /* AndroidSDK-Commercial license */
7018  if (INFILE(_LT_GOOGLE_SDK)) {
7019  INTERESTING("AndroidSDK.Commercial");
7020  }
7022  /* Qhull license */
7023  if (INFILE(_PHR_Qhull)) {
7024  INTERESTING("Qhull");
7025  }
7027  /* OZPLB-1.0 license */
7028  if (INFILE(_PHR_OZPLB_10)) {
7029  INTERESTING("OZPLB-1.0");
7030  }
7032  /* Texas Instruments license */
7033  if (INFILE(_LT_TI_BASE)) {
7034  if (INFILE(_LT_TI_TSPA)) {
7035  INTERESTING("TI-TSPA");
7036  } else if (INFILE(_LT_TI_TFL)) {
7037  INTERESTING("TI-TFL");
7038  }
7039  }
7041 
7042  /*
7043  * Some licenses say "licensed under the same terms as FOO".
7044  */
7045  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
7046  if (*licStr == NULL_CHAR) {
7047  i = 0;
7048  if (INFILE(_LT_SAME_LICENSE_1)) {
7049  INTERESTING(lDebug ? "Same-lic-1" : "Same-license-as");
7050  i = 1;
7051  } else if (INFILE(_LT_SAME_LICENSE_2)) {
7052  INTERESTING(lDebug ? "Same-lic-2" : "Same-license-as");
7053  i = 2;
7054  }
7055  if (i) {
7056  if (cur.licPara == NULL_STR) {
7057  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
7058  }
7059  }
7060  }
7062  gl.flags |= ~FL_SAVEBASE; /* turn off, regardless */
7063  /*
7064  * ... and, there are several generic claims that "you are free to use this
7065  * software".
7066  * We call these claims "Freeware", because you can use the software free of charge,
7067  * but some other copyright holder exclusive rights are not granted in some cases.
7068  */
7069  if (*licStr == NULL_CHAR || pd >= 0) {
7070  for (i = 0; i < NFREECLAIM; i++) {
7071  if (CANSKIP(i, _KW_permission, _FREE_first_perm,
7072  _FREE_last_perm)) {
7073  i = _FREE_last_perm;
7074  continue;
7075  }
7076  if (CANSKIP(i, _KW_distribut, _FREE_first_dist,
7077  _FREE_last_dist)) {
7078  i = _FREE_last_dist;
7079  continue;
7080  }
7081  if (INFILE(_FREECLAIM_first+i)) {
7082  (void) strcpy(name, "Freeware");
7083  if (lDebug) {
7084  (void) sprintf(name+8, "(%d)", i+1);
7085  }
7086  INTERESTING(name);
7087  break;
7088  }
7089  }
7090  }
7092  /* Check for Public Domain */
7093  if (!lmem[_fANTLR] && !lmem[_fCLA] && !lmem[_mPYTHON] && !lmem[_mGFDL] &&
7094  !lmem[_fODBL] && !lmem[_fPDDL] && !lmem[_fRUBY] && !lmem[_fSAX] && !lmem[_fAPL] && !lmem[_mAPACHE] && !lmem[_mAPACHE10] && !lmem[_mAPACHE11] &&
7095  !lmem[_fARTISTIC] && !lmem[_fCITRIX] && !lmem[_mLGPL] && !lmem[_fBSD]&& NOT_INFILE(_TITLE_D_FSL_10)
7096  && !INFILE(_LT_CPOL)) {
7097  pd = checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
7098  }
7100  /*
7101  * Some licenses point you to files/URLs...
7102  */
7103  if (*licStr == NULL_CHAR) {
7104  checkFileReferences(filetext, size, score, kwbm, isML, isPS);
7105  }
7107  /*
7108  * And, If no other licenses are present but there's a reference to
7109  * something being non-commercial, better note it now.
7110  */
7111 #if 0
7112  if (*licStr == NULL_CHAR && !HASKW(kwbm, _KW_public_domain))
7113 #endif
7114  if (maxInterest != IL_HIGH && !HASKW(kwbm, _KW_public_domain) &&
7115  NOT_INFILE(_PHR_COMMERC_NONCOMM)) {
7116  if (INFILE(_LT_NONCOMMERCIAL_1)) {
7117  INTERESTING(lDebug ? "NonC(1)" : "Non-commercial");
7118  }
7119  else if (INFILE(_LT_ZZNON_COMMERC1)) {
7120  INTERESTING(lDebug ? "NonC(2)" : "Non-commercial");
7121  }
7122  else if (INFILE(_LT_ZZNON_COMMERC2)) {
7123  INTERESTING(lDebug ? "NonC(3)" : "Non-commercial");
7124  }
7125  else if (HASTEXT(_TEXT_COMMERC, 0) &&
7126  INFILE(_PHR_NONCOMMERCIAL)) {
7127  INTERESTING(lDebug ? "NonC(4)" : "Non-commercial");
7128  }
7129  }
7130  if (INFILE(_LT_NOT_OPENSOURCE)) {
7131  INTERESTING("Not-OpenSource");
7132  }
7133  listClear(&whereList, NO); /* again, clear "unused" matches */
7135  /*
7136  * Look for footprints that declare something as proprietary... if we such
7137  * a statement, we care about the Copyright owner, too.
7138  */
7139  if (maxInterest != IL_HIGH) { /* if (*licStr == NULL_CHAR) { */
7140  j = 0; /* just a flag */
7141  if (INFILE(_LT_GEN_PROPRIETARY_1)) {
7142  INTERESTING(lDebug ? "Prop(1)" : "COMMERCIAL");
7143  j++;
7144  }
7145  else if (INFILE(_LT_GEN_PROPRIETARY_2)) {
7146  INTERESTING(lDebug ? "Prop(2)" : "COMMERCIAL");
7147  j++;
7148  }
7149  else if (INFILE(_LT_GEN_PROPRIETARY_3)) {
7150  INTERESTING(lDebug ? "Prop(3)" : "COMMERCIAL");
7151  j++;
7152  }
7153  else if (INFILE(_LT_GEN_PROPRIETARY_4)) {
7154  INTERESTING(lDebug ? "Prop(4)" : "COMMERCIAL");
7155  j++;
7156  }
7157  else if (INFILE(_LT_GEN_PROPRIETARY_5)) {
7158  INTERESTING(lDebug ? "Prop(5)" : "COMMERCIAL");
7159  j++;
7160  }
7161  else if (INFILE(_LT_GEN_PROPRIETARY_6)) {
7162  INTERESTING(lDebug ? "Prop(6)" : "COMMERCIAL");
7163  j++;
7164  }
7165  else if (INFILE(_LT_GEN_PROPRIETARY_7)) {
7166  INTERESTING(lDebug ? "Prop(7)" : "COMMERCIAL");
7167  j++;
7168  }
7169  else if (INFILE(_LT_GEN_PROPRIETARY_8)) {
7170  INTERESTING(lDebug ? "Prop(8)" : "COMMERCIAL");
7171  j++;
7172  }
7173  if (j) {
7174  checkCornerCases(filetext, size, score, kwbm, isML,
7175  isPS, nw, YES);
7176  }
7177  }
7178  listClear(&whereList, NO); /* again, clear "unused" matches */
7180  /*
7181  * END of license-footprint checking of known patterns/strings
7182  ******
7183  * Plan-B: look for things attorneys generally believe aren't "overly
7184  * legally-binding" or "uninterestring from a license perspective':
7185  * ... notable references to commercial, non-commercial, not-for-profit,
7186  * not-an-open-source-license, etc.
7187  */
7188  if (maxInterest != IL_HIGH) {
7189  if (INFILE(_LT_COMMERCIAL_1)) {
7190  INTERESTING(lDebug ? "COMM(1)" : "COMMERCIAL");
7191  }
7192  else if (INFILE(_LT_COMMERCIAL_2)) {
7193  INTERESTING(lDebug ? "COMM(2)" : "COMMERCIAL");
7194  }
7195  else if (HASTEXT(_LT_COMMERCIAL_3, REG_EXTENDED)) {
7196  if (HASTEXT(_LT_COMMERCIAL_Intel, REG_EXTENDED)) {
7197  INTERESTING("Intel.Commercial");
7198  } else if (HASTEXT(_LT_COMMERCIAL_Broadcom, REG_EXTENDED)) {
7199  INTERESTING("Broadcom.Commercial");
7200  } else {
7201  INTERESTING(lDebug ? "COMM(3)" : "COMMERCIAL");
7202  }
7203  }
7204  else if (INFILE(_LT_COMMERCIAL_4)) {
7205  if (HASTEXT(_LT_COMMERCIAL_Android_Fraunhofer, 0)) {
7206  INTERESTING("AndroidFraunhofer.Commercial");
7207  } else {
7208  INTERESTING(lDebug ? "COMM(4)" : "COMMERCIAL");
7209  }
7210  }
7211  else if (HASTEXT(_TEXT_BOOK, 0) && INFILE(_LT_BOOKPURCHASE)) {
7212  INTERESTING(lDebug ? "PurchBook" : "COMMERCIAL");
7213  }
7214  else if (INFILE(_LT_COMMERCIAL_5)) {
7215  INTERESTING(lDebug ? "COMM(5)" : "COMMERCIAL");
7216  }
7217  else if (INFILE(_LT_COMMERCIAL_6)) {
7218  INTERESTING(lDebug ? "COMM(6)" : "COMMERCIAL");
7219  }
7220  else if (INFILE(_LT_COMMERCIAL_7)) {
7221  INTERESTING(lDebug ? "COMM(7)" : "COMMERCIAL");
7222  }
7223  if (INFILE(_LT_NONPROFIT_1)) {
7224  MEDINTEREST(lDebug ? "NonP(1)" : "Non-profit");
7225  }
7226  else if (!lmem[_mPYTH_TEXT] && HASTEXT(_TEXT_PROFIT, 0) &&
7227  INFILE(_PHR_NONPROFIT)) {
7228  if (!(lmem[_fIETF] + lmem[_fDOC])) {
7229  MEDINTEREST(lDebug ? "NonP(2)" : "Non-profit");
7230  }
7231  }
7232  if (INFILE(_PHR_NO_SALE)) {
7233  MEDINTEREST("Not-for-sale");
7234  }
7235  if (!lmem[_mALADDIN] && INFILE(_PHR_NOT_OPEN)) {
7236  MEDINTEREST("NOT-Open-Source");
7237  }
7238  if (HASKW(kwbm, _KW_patent) && INFILE(_PHR_PATENT) && NOT_INFILE(_PHR_PATENT_NOT)) {
7239  MEDINTEREST("Patent-ref");
7240  }
7241  if (INFILE(_PHR_RESTRICT_RIGHTS)) {
7242  if (INFILE(_PHR_USGOVT_RESTRICT)) {
7243  MEDINTEREST("Govt-restrict");
7244  }
7245  else {
7246  MEDINTEREST("Restricted-rights");
7247  }
7248  }
7249  if (INFILE(_LT_EXPORTS_USA)) {
7250  MEDINTEREST("US-Export-restrict");
7251  }
7252  if (pd < 0) {
7253  checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
7254  }
7255  }
7256  listClear(&whereList, NO); /* again, clear "unused" matches */
7258  /*
7259  * These "minimal-reference possibilities" MUST adhere to a prescribed
7260  * format: the name to be used MUST be the first of several name to match:
7261  * "(NAME identifier|NAME license|license NAME)"
7262  *****
7263  * Furthermore, licenses should be ordered from the most-specific to the
7264  * least-specific; e.g., look for LGPL_v3 before looking for LGPL -- the
7265  * strGrep() calls below ensure reporting only more-specific license
7266  * versions if found. For instance, if you order LGPL *before* LGPL_v3
7267  * we'll get both LGPLv3 and LGPL, which is redundant AND looks stupid.
7268  */
7269  if (*licStr == NULL_CHAR && HASKW(kwbm, _KW_license)) {
7270  for (i = 0, j = _MINlicense_first; i < NMINlicense; i++, j++) {
7271  if (dbgIdxGrep(j, filetext, lDiags)) {
7272  cp = strchr(_REGEX(j), ' ');
7273  if (cp == NULL_STR) {
7274  Assert(NO, "Bad reference[1] %d", j);
7275  continue;
7276  }
7277  *cp = NULL_CHAR;
7278  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7279  REG_ICASE)) {
7280  (void) sprintf(name, "%s-possibility",
7281  _REGEX(j)+1);
7282  LOWINTEREST(name);
7283  }
7284  *cp = ' ';
7285  }
7286  }
7287  }
7288  listClear(&whereList, NO); /* again, clear "unused" matches */
7290  if (*licStr == NULL_CHAR && HASTEXT(_TEXT_SOURCE, 0)) {
7291  for (i = 0, j = _MINsource_first; i < NMINsource; i++, j++) {
7292  if (dbgIdxGrep(j, filetext, lDiags)) {
7293  cp = strchr(_REGEX(j), ' ');
7294  if (cp == NULL_STR) {
7295  Assert(NO, "Bad reference[2] %d", j);
7296  continue;
7297  }
7298  *cp = NULL_CHAR;
7299  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7300  REG_ICASE)) {
7301  (void) sprintf(name, "%s-possibility",
7302  _REGEX(j)+1);
7303  LOWINTEREST(name);
7304  }
7305  *cp = ' ';
7306  }
7307  }
7308  }
7309  listClear(&whereList, NO); /* again, clear "unused" matches */
7311  if (*licStr == NULL_CHAR && HASTEXT(_KW_copyright, 0)) {
7312  for (i = 0, j = _MINcpyrt_first; i < NMINcpyrt; i++, j++) {
7313  if (dbgIdxGrep(j, filetext, lDiags)) {
7314  cp = strchr(_REGEX(j), ' ');
7315  if (cp == NULL_STR) {
7316  Assert(NO, "Bad reference[2] %d", j);
7317  continue;
7318  }
7319  *cp = NULL_CHAR;
7320  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7321  REG_ICASE)) {
7322  (void) sprintf(name, "%s-possibility",
7323  _REGEX(j)+1);
7324  LOWINTEREST(name);
7325  }
7326  *cp = ' ';
7327  }
7328  }
7329  }
7330  listClear(&whereList, NO); /* again, clear "unused" matches */
7332  /*
7333  * NOW look for unclassified licenses, if we haven't found anything yet.
7334  * And avoid checking .po files -- message catalogues are known to have
7335  * false-positives.
7336  *****
7337  * FIX-ME: if a file contains ONLY a "no warranty" description/clause, it
7338  * will (currently) get flagged as an UnclassifiedLicense (so the check
7339  * for no-warranty was moved ABOVE this check in case we can use that info)
7340  */
7341  if (maxInterest != IL_HIGH && !lmem[_fDOC]) {
7342  if (!pd &&
7343  checkUnclassified(filetext, size, scp->score, isML,
7344  isPS, nw)) {
7345  strcpy(name, LS_UNCL);
7346  if (isPS) {
7347  strcat(name, "(PS)");
7348  }
7349  MEDINTEREST(name);
7350  checkCornerCases(filetext, size, score, kwbm, isML, isPS, nw, YES);
7351  }
7352 #ifdef UNKNOWN_CHECK_DEBUG
7353  else {
7354  printf("... NOT an Unclassified license, NW %d PD %d\n",
7355  nw, pd);
7356  }
7357 #endif /* UNKNOWN_CHECK_DEBUG */
7358  }
7359  listClear(&whereList, NO); /* clear "unused" matches */
7361  /*
7362  * If we still haven't found anything, check for the really-low interest
7363  * items such as copyrights, and references to keywords (patent/trademark)
7364  */
7365  if (maxInterest != IL_HIGH && pd <= 0) {
7366  checkCornerCases(filetext, size, score, kwbm, isML, isPS,
7367  nw, NO);
7368  }
7369 #ifdef MEMSTATS
7370  printf("DEBUG: static lists in parseLicenses():\n");
7371  listDump(&searchList, -1);
7372  memStats("parseLicenses: pre-Free");
7373 #endif /* MEMSTATS */
7374  listClear(&searchList, NO);
7375 #ifdef MEMSTATS
7376  memStats("parseLicenses: EOP");
7377 #endif /* MEMSTATS */
7378 #ifdef LTSR_DEBUG
7379  showLTCache("LTSR-results AFTER:");
7380 #endif /* LTSR_DEBUG */
7381 #ifdef FLAG_NO_COPYRIGHT
7382  if (!SEEN(_CR_ZZZANY)) {
7383  (void) INFILE(_CR_ZZZANY);
7384  }
7385  if (!SEEN(_CR_ZZZWRONG_1)) {
7386  (void) INFILE(_CR_ZZZWRONG_1);
7387  }
7388  if (LVAL(_CR_ZZZANY)+LVAL(_CR_ZZZWRONG_1)+
7389  HASREGEX(_CR_ZZZWRONG_2, filetext) == 0) {
7390  gl.flags |= FL_NOCOPYRIGHT;
7391  }
7392 #endif /* FLAG_NO_COPYRIGHT */
7393  listClear(&whCacheList, NO);
7394  if (whereList.used) {
7395  listClear(&whereList, NO); /* may already be cleared! */
7396  }
7397  return(licStr+1); /* don't include the leading comma */
7398 }
7399 
7408 char *sisslVersion(char *filetext, int size, int isML, int isPS)
7409 {
7410  char *lstr = NULL_STR;
7411 
7412 #ifdef PROC_TRACE
7413  traceFunc("== sisslVersion()\n");
7414 #endif /* PROC_TRACE */
7415 
7416  if (INFILE(_TITLE_SISSL_V11)) {
7417  lstr = "SISSL-1.1";
7418  }
7419  else if (INFILE(_TITLE_SISSL_V12)) {
7420  lstr = "SISSL-1.2";
7421  } else {
7422  lstr = "SISSL";
7423  }
7424  return lstr;
7425 }
7426 
7435 char *aslVersion(char *filetext, int size, int isML, int isPS)
7436 {
7437  char *lstr = NULL_STR;
7438 
7439 #ifdef PROC_TRACE
7440  traceFunc("== aslVersion()\n");
7441 #endif /* PROC_TRACE */
7442 
7443  /*
7444  * Exclude first non-Apache licenses
7445  */
7446  if (INFILE(_TITLE_PHORUM) || INFILE(_CR_PHORUM)) {
7447  lstr = "Phorum";
7448  lmem[_mAPACHE] = 1;
7449  }
7450  else if (INFILE(_CR_IMAGEMAGICK)) {
7451  lstr = "ImageMagick(Apache)";
7452  lmem[_mAPACHE] = 1;
7453  }
7454  /*
7455  * Apache-2.0 cases
7456  */
7457  else if (INFILE(_SPDX_Apache_20)) {
7458  lstr = (lDebug ? "Apache-2.0(SPDX)" : "Apache-2.0");
7459  lmem[_mAPACHE] = 1;
7460  }
7461  else if (INFILE(_TITLE_Apache_20)) {
7462  lstr = (lDebug ? "Apache-2(f)" : "Apache-2.0");
7463  lmem[_mAPACHE] = 1;
7464  }
7465  else if (INFILE(_PHR_Apache_20_ref1) || INFILE(_PHR_Apache_20_ref2) || INFILE(_PHR_Apache_20_ref3))
7466  {
7467  lstr = (lDebug ? "PHR_Apache_20_ref(1-5)" : "Apache-2.0");
7468  lmem[_mAPACHE] = 1;
7469  }
7470  else if (URL_INFILE(_URL_Apache_20)) {
7471  lstr = (lDebug ? "Apache-2.0(u)" : "Apache-2.0");
7472  lmem[_mAPACHE] = 1;
7473  }
7474  else if (INFILE(_LT_Apache_20) && NOT_INFILE(_TITLE_Flora_V10) && NOT_INFILE(_TITLE_Flora_V11) && !URL_INFILE(_URL_Flora))
7475  {
7476  lstr = (lDebug ? "Apache(2.0#2)" : "Apache-2.0");
7477  lmem[_mAPACHE] = 1;
7478  }
7479  else if (INFILE(_PHR_Apache_20_ref4) || INFILE(_PHR_Apache_20_ref5) || INFILE(_PHR_Apache_20_ref6) || INFILE(_PHR_Apache_20_ref7)) {
7480  lstr = (lDebug ? "Apache(2.0#3)" : "Apache-2.0");
7481  lmem[_mAPACHE] = 1;
7482  }
7483  else if (INFILE(_TITLE_Apache_20)) {
7484  lstr = (lDebug ? "Apache(2.0#4)" : "Apache-2.0");
7485  lmem[_mAPACHE] = 1;
7486  }
7487  else if (URL_INFILE(_URL_Apache_20_1)) {
7488  lstr = (lDebug ? "Apache2(url#1)" : "Apache-2.0");
7489  lmem[_mAPACHE] = 1;
7490  }
7491  else if (URL_INFILE(_URL_Apache_20_2)) {
7492  lstr = (lDebug ? "Apache2(url#2)" : "Apache-2.0");
7493  lmem[_mAPACHE] = 1;
7494  }
7495  /*
7496  * Apache-1.1 cases
7497  */
7498  else if (INFILE(_SPDX_Apache_11)) {
7499  lstr = (lDebug ? "Apache-1.1(SPDX)" : "Apache-1.1");
7500  lmem[_mAPACHE11] = 1;
7501  }
7502  else if (INFILE(_TITLE_Apache_11)) {
7503  lstr = (lDebug ? "Apache-1.1(f)" : "Apache-1.1");
7504  lmem[_mAPACHE11] = 1;
7505  }
7506  else if (URL_INFILE(_URL_Apache_11)) {
7507  lstr = (lDebug ? "Apache-1.1(u)" : "Apache-1.1");
7508  lmem[_mAPACHE11] = 1;
7509  }
7510  else if (INFILE(_LT_Apache_11_CLAUSE_3) && INFILE(_LT_Apache_11_CLAUSE_4) && INFILE(_LT_Apache_11_CLAUSE_5)) {
7511  lstr = (lDebug ? "Apache-1.1(clauses)" : "Apache-1.1");
7512  lmem[_mAPACHE11] = 1;
7513  }
7514  else if (INFILE(_PHR_Apache_11_ref1)) {
7515  lstr = (lDebug ? "Apache(1.1#phr)" : "Apache-1.1");
7516  lmem[_mAPACHE11] = 1;
7517  }
7518  /*
7519  * Apache-1.0 cases
7520  */
7521  else if (INFILE(_SPDX_Apache_10)) {
7522  lstr = (lDebug ? "Apache-1.0(SPDX)" : "Apache-1.0");
7523  lmem[_mAPACHE10] = 1;
7524  }
7525  else if (INFILE(_PHR_Apache_ref2)) {
7526  lstr = (lDebug ? "Apache-1.0(f)" : "Apache-1.0");
7527  lmem[_mAPACHE10] = 1;
7528  }
7529  else if (INFILE(_LT_Apache_10_CLAUSE_4)) {
7530  lstr = (lDebug ? "Apache-1.0(g)" : "Apache-1.0");
7531  lmem[_mAPACHE10] = 1;
7532  }
7533  else if (URL_INFILE(_URL_Apache_10)) {
7534  lstr = (lDebug ? "Apache-1.0(u)" : "Apache-v1.0");
7535  lmem[_mAPACHE10] = 1;
7536  }
7537  /*
7538  * BSD-style cases
7539  */
7540  else if (INFILE(_LT_BSD_1)) {
7541  if (INFILE(_CR_APACHE) || INFILE(_TITLE_Apache)) {
7542  if (INFILE(_PHR_Apache_20_ref6)) {
7543  lstr = (lDebug ? "Apache-20_ref6" : "Apache-2.0");
7544  lmem[_mAPACHE] = 1;
7545  }
7546  else if (INFILE(_PHR_Apache_11_ref2)) {
7547  lstr = (lDebug ? "Apache(1.1#2)" : "Apache-1.1");
7548  lmem[_mAPACHE11] = 1;
7549  }
7550  else if ((INFILE(_PHR_Apache_ref2) || INFILE(_LT_Apache_10_CLAUSE_4))) {
7551  lstr = (lDebug ? "Apache(1.0#2)" : "Apache-1.0");
7552  lmem[_mAPACHE10] = 1;
7553  }
7554  else {
7555  lstr = (lDebug ? "Apache(title)" : "Apache");
7556  lmem[_mAPACHE] = 1;
7557  }
7558  }
7559  }
7560  /*
7561  * Apache without versions
7562  */
7563  else if (!lmem[_fREAL] && INFILE(_SPDX_Apache)) {
7564  lstr = (lDebug ? "Apache(SPDX)" : "Apache");
7565  lmem[_mAPACHE] = 1;
7566  }
7567  else if (INFILE(_PHR_Apache_ref1)) {
7568  INTERESTING(lDebug ? "Apache(ref#1)" : "Apache");
7569  lmem[_mAPACHE] = 1;
7570  }
7571  else if (INFILE(_PHR_Apache_ref4)) {
7572  lstr = (lDebug ? "Apache(ref#3)" : "Apache");
7573  lmem[_mAPACHE] = 1;
7574  }
7575  else if (INFILE(_PHR_Apache_ref3)) {
7576  lstr = (lDebug ? "Apache(ref#4)" : "Apache");
7577  lmem[_mAPACHE] = 1;
7578  }
7579  else if (URL_INFILE(_URL_Apache_1)) {
7580  lstr = (lDebug ? "Apache(url#1)" : "Apache");
7581  lmem[_mAPACHE] = 1;
7582  }
7583  else if (URL_INFILE(_URL_Apache_2)) {
7584  lstr = (lDebug ? "Apache(url#2)" : "Apache");
7585  lmem[_mAPACHE] = 1;
7586  }
7587  else if (INFILE(_PHR_Apache_ref6)) {
7588  lstr = (lDebug ? "Apache(ref#6)" : "Apache");
7589  lmem[_mAPACHE] = 1;
7590  }
7591  /*
7592  * _LT_Apache_1 and _2 cannot be identified in any Apache license
7593  * versions. They have been defined in very early nomos versions. They
7594  * are kept here, although, there are no special test cases for them.
7595  */
7596  else if (INFILE(_LT_Apache_1)) {
7597  lstr = (lDebug ? "Apache(1)" : "Apache");
7598  lmem[_mAPACHE] = 1;
7599  }
7600  else if (INFILE(_LT_Apache_2)) {
7601  lstr = (lDebug ? "Apache(2)" : "Apache");
7602  lmem[_mAPACHE] = 1;
7603  }
7604  else if (INFILE(_LT_APACHESTYLEref)) {
7605  lstr = ("Apache-style");
7606  lmem[_mAPACHE] = 1;
7607  }
7608  return lstr;
7609 }
7610 
7619 char *mplNplVersion(char *filetext, int size, int isML, int isPS)
7620 {
7621  char *lstr = NULL_STR;
7622 
7623 #ifdef PROC_TRACE
7624  traceFunc("== mplNplVersion()\n");
7625 #endif /* PROC_TRACE */
7626 
7627  if (INFILE(_TITLE_MPL11_OR_LATER)) {
7628  lstr = "MPL-1.1+";
7629  }
7630  else if (INFILE(_LT_MPL11_ref)) {
7631  lstr = "MPL-1.1";
7632  }
7633  else if (INFILE(_TITLE_NPL11_MPL)) {
7634  lstr = "NPL-1.1";
7635  }
7636  else if (INFILE(_TITLE_MPL11) && INFILE(_TITLE_MPL_style)) {
7637  lstr = "MPL-1.1-style";
7638  }
7639  else if (INFILE(_TITLE_SUGARCRM_PL)) {
7640  lstr = "SugarCRM-1.1.3";
7641  lmem[_mMPL] = 1;
7642  lmem[_fATTRIB] = 1;
7643  }
7644  else if (INFILE(_TITLE_MPL11) && !HASTEXT(_LT_NP_AME, REG_EXTENDED)) {
7645  lstr = "MPL-1.1";
7646  }
7647  else if (INFILE(_TITLE_MPL20_EXCEPTION)) {
7648  lstr = "MPL-2.0-no-copyleft-exception";
7649  }
7650  else if (INFILE(_TITLE_MPL20) || URL_INFILE(_URL_MPL20) || HASTEXT(_LT_MPL20_ref, REG_EXTENDED)) {
7651  lstr = "MPL-2.0";
7652  }
7653  else if (INFILE(_TITLE_MPL10) && INFILE(_TITLE_ERLPL)) {
7654  lstr = "ErlPL-1.1";
7655  }
7656  else if (INFILE(_TITLE_MPL10)) {
7657  lstr = "MPL-1.0";
7658  }
7659  else if (INFILE(_TITLE_MPL_EULA_30)) {
7660  lstr = "MPL-EULA-3.0";
7661  }
7662  else if (INFILE(_TITLE_MPL_EULA_20)) {
7663  lstr = "MPL-EULA-2.0";
7664  }
7665  else if (INFILE(_TITLE_MPL_EULA_11)) {
7666  lstr = "MPL-EULA-1.1";
7667  }
7668  else if (URL_INFILE(_URL_NPL10)) {
7669  lstr = (lDebug ? "NPL1.0(url)" : "NPL-1.0");
7670  }
7671  else if (URL_INFILE(_URL_NPL11)) {
7672  lstr = (lDebug ? "NPL1.1(url)" : "NPL-1.1");
7673  }
7674  else if (URL_INFILE(_URL_MPL10)) {
7675  lstr = (lDebug ? "MPL1.0(url)" : "MPL-1.0");
7676  }
7677  else if (URL_INFILE(_URL_MPL11)) {
7678  lstr = (lDebug ? "MPL1.1(url)" : "MPL-1.1");
7679  }
7680  else if (INFILE(_FILE_MPL10)) {
7681  lstr = (lDebug ? "MPL1.0(file)" : "MPL-1.0");
7682  }
7683  else if (INFILE(_FILE_MPL11)) {
7684  lstr = (lDebug ? "MPL1.1(file)" : "MPL-1.1");
7685  }
7686  else if (INFILE(_TITLE_NPL11_OR_LATER)) {
7687  lstr = "NPL-1.1+";
7688  }
7689  else if (INFILE(_TITLE_NPL11)) {
7690  lstr = "NPL-1.1";
7691  }
7692  else if (INFILE(_TITLE_NPL10)) {
7693  lstr = "NPL-1.0";
7694  }
7695  else if (URL_INFILE(_URL_NPL)) {
7696  lstr = (lDebug ? "NPL(url)" : "NPL");
7697  }
7698  else if (INFILE(_SPDX_MPL_10)) {
7699  lstr = "MPL-1.0";
7700  }
7701  else if (INFILE(_SPDX_MPL_11)) {
7702  lstr = "MPL-1.1";
7703  }
7704  else if (INFILE(_SPDX_MPL_20_no_copyleft_exception)) {
7705  lstr = "MPL-2.0-no-copyleft-exception";
7706  }
7707  else if (INFILE(_SPDX_MPL_20)) {
7708  lstr = "MPL-2.0";
7709  }
7710  else if (URL_INFILE(_URL_MPL_LATEST)) {
7711  lstr = (lDebug ? "MPL(latest)" : "MPL");
7712  }
7713  else if (URL_INFILE(_URL_MPL)) {
7714  lstr = (lDebug ? "MPL(url)" : "MPL");
7715  }
7716  else if (INFILE(_TITLE_NPL)) {
7717  lstr = "NPL";
7718  }
7719  else if (INFILE(_TITLE_MPL)) {
7720  lstr = "MPL";
7721  }
7722  else {
7723  lstr = (lDebug ? "MPL(last)" : "MPL");
7724  }
7725  return lstr;
7726 }
7727 
7736 char *realVersion(char *filetext, int size, int isML, int isPS, int ref)
7737 {
7738  char *lstr = NULL_STR;
7739 
7740 #ifdef PROC_TRACE
7741  traceFunc("== realVersion()\n");
7742 #endif /* PROC_TRACE */
7743 
7744  if (ref == _TITLE_RPSL) {
7745  if (INFILE(_TITLE_RPSL_V30)) {
7746  lstr = "RPSL-3.0";
7747  }
7748  else if (INFILE(_TITLE_RPSL_V20)) {
7749  lstr = "RPSL-2.0";
7750  }
7751  else if (INFILE(_TITLE_RPSL_V10)) {
7752  lstr = "RPSL-1.0";
7753  }
7754  else if (INFILE(_TITLE_RPSL)) {
7755  lstr = "RPSL";
7756  }
7757  }
7758  else if (ref == _TITLE_RCSL) {
7759  if (INFILE(_TITLE_RCSL_V30)) {
7760  lstr = "RCSL-3.0";
7761  }
7762  else if (INFILE(_TITLE_RCSL_V20)) {
7763  lstr = "RCSL-2.0";
7764  }
7765  else if (INFILE(_TITLE_RCSL_V10)) {
7766  lstr = "RCSL-1.0";
7767  }
7768  else if (INFILE(_TITLE_RCSL)) {
7769  lstr = "RCSL";
7770  }
7771  }
7772  else {
7773  lstr = "RealNetworks-Unknown";
7774  }
7775  return lstr;
7776 }
7777 
7786 char *pythonVersion(char *filetext, int size, int isML, int isPS)
7787 {
7788  char *lstr = NULL_STR;
7789 
7790 #ifdef PROC_TRACE
7791  traceFunc("== pythonVersion()\n");
7792 #endif /* PROC_TRACE */
7793 
7794  if (INFILE(_TITLE_PYTHON201)) {
7795  lstr = "Python-2.0.1";
7796  }
7797  else if (INFILE(_TITLE_PYTHON202)) {
7798  lstr = "Python-2.0.2";
7799  }
7800  else if (INFILE(_TITLE_PYTHON211)) {
7801  lstr = "Python-2.1.1";
7802  }
7803  else if (INFILE(_TITLE_PYTHON213)) {
7804  lstr = "Python-2.1.3";
7805  }
7806  else if (INFILE(_TITLE_PYTHON223)) {
7807  lstr = "Python-2.2.3";
7808  }
7809  else if (INFILE(_TITLE_PYTHON227)) {
7810  lstr = "Python-2.2.7";
7811  }
7812  else if (INFILE(_TITLE_PYTHON237)) {
7813  lstr = "Python-2.3.7";
7814  }
7815  else if (INFILE(_TITLE_PYTHON244)) {
7816  lstr = "Python-2.4.4";
7817  }
7818  else if (INFILE(_TITLE_PYTHON22)) {
7819  lstr = "Python-2.2";
7820  }
7821  else if (INFILE(_TITLE_PYTHON23)) {
7822  lstr = "Python-2.3";
7823  }
7824  else if (INFILE(_TITLE_PYTHON_20_1) || INFILE(_TITLE_PYTHON_20_2)) {
7825  lstr = "Python-2.0";
7826  }
7827  else {
7828  lstr = "Python";
7829  }
7830  return lstr;
7831 }
7832 
7841 char *aflVersion(char *filetext, int size, int isML, int isPS)
7842 {
7843  char *lstr = NULL_STR;
7844 
7845 #ifdef PROC_TRACE
7846  traceFunc("== aflVersion()\n");
7847 #endif /* PROC_TRACE */
7848 
7849  if (INFILE(_TITLE_AFL30)) {
7850  lstr = lDebug? "AFL(v3.0#1)" : "AFL-3.0";
7851  }
7852  else if (INFILE(_TITLE_AFL21)) {
7853  lstr = lDebug? "AFL(v2.1#1)" : "AFL-2.1";
7854  }
7855  else if (INFILE(_TITLE_AFL20)) {
7856  lstr = lDebug? "AFL(v2.0#1)" : "AFL-2.0";
7857  }
7858  else if (INFILE(_TITLE_AFL12)) {
7859  lstr = lDebug? "AFL(v1.2#1)" : "AFL-1.2";
7860  }
7861  else if (INFILE(_TITLE_AFL11)) {
7862  lstr = lDebug? "AFL(v1.1#1)" : "AFL-1.1";
7863  }
7864  else if (INFILE(_TITLE_AFL10)) {
7865  lstr = lDebug? "AFL(v1.0#1)" : "AFL-1.0";
7866  }
7867  else {
7868  lstr = "AFL";
7869  }
7870  return lstr;
7871 }
7872 
7881 char *oslVersion(char *filetext, int size, int isML, int isPS)
7882 {
7883  char *lstr = NULL_STR;
7884  /* */
7885 #ifdef PROC_TRACE
7886  traceFunc("== oslVersion()\n");
7887 #endif /* PROC_TRACE */
7888  /* */
7889  if (INFILE(_TITLE_NON_PROFIT_OSL30)) {
7890  lstr = "NPOSL-3.0";
7891  }
7892  else if (INFILE(_TITLE_OSL30)) {
7893  lstr = lDebug? "OSL(v3.0#1)" : "OSL-3.0";
7894  }
7895  else if (INFILE(_TITLE_OSL21)) {
7896  lstr = lDebug? "OSL(v2.1#1)" : "OSL-2.1";
7897  }
7898  else if (INFILE(_TITLE_OSL20)) {
7899  lstr = lDebug? "OSL(v2.0#1)" : "OSL-2.0";
7900  }
7901  else if (INFILE(_TITLE_OSL11)) {
7902  lstr = lDebug? "OSL(v1.1#1)" : "OSL-1.1";
7903  }
7904  else if (INFILE(_TITLE_OSL10)) {
7905  lstr = lDebug? "OSL(v1.0#1)" : "OSL-1.0";
7906  }
7907  else {
7908  lstr = "OSL";
7909  }
7910  return lstr;
7911 }
7912 
7921 char *cddlVersion(char *filetext, int size, int isML, int isPS)
7922 {
7923  char *lstr = NULL_STR;
7924  /* */
7925 #ifdef PROC_TRACE
7926  traceFunc("== cddlVersion()\n");
7927 #endif /* PROC_TRACE */
7928  /* */
7929  if (INFILE(_TITLE_CDDL_10)) {
7930  lstr = "CDDL-1.0";
7931  }
7932  else if (INFILE(_SPDX_CDDL_10)) {
7933  INTERESTING("CDDL-1.0");
7934  }
7935  else if (URL_INFILE(_URL_CDDL_10)) {
7936  lstr = "CDDL-1.0";
7937  }
7938  else if (INFILE(_TITLE_CDDL_11)) {
7939  lstr = "CDDL-1.1";
7940  }
7941  else if (INFILE(_SPDX_CDDL_11)) {
7942  INTERESTING("CDDL-1.1");
7943  }
7944  else if (URL_INFILE(_URL_CDDL)) {
7945  lstr = "CDDL";
7946  }
7947  else {
7948  lstr = "CDDL";
7949  }
7950  return lstr;
7951 }
7952 
7961 char *lpplVersion(char *filetext, int size, int isML, int isPS)
7962 {
7963  char *lstr = NULL_STR;
7964  /* */
7965 #ifdef PROC_TRACE
7966  traceFunc("== lpplVersion()\n");
7967 #endif /* PROC_TRACE */
7968  /* */
7969  if (INFILE(_PHR_LATEX_PL13A_OR_LATER_1) ||
7970  INFILE(_PHR_LATEX_PL13A_OR_LATER_2)) {
7971  if (INFILE(_LT_LATEX_PREAMBLE)) {
7972  lstr = lDebug ? "LPPL-v1.3a(#1)" : "LPPL-1.3a";
7973  }
7974  else {
7975  lstr = "LPPL-1.3a+";
7976  }
7977  }
7978  else if (INFILE(_TITLE_LATEX_PL13A) || INFILE(_PHR_LATEX_PL13A)) {
7979  lstr = lDebug ? "LPPL-v1.3a(#2)" : "LPPL-1.3a";
7980  }
7981  else if (INFILE(_PHR_LATEX_PL13B_OR_LATER_1) ||
7982  INFILE(_PHR_LATEX_PL13B_OR_LATER_2)) {
7983  if (INFILE(_LT_LATEX_PREAMBLE)) {
7984  lstr = lDebug ? "LPPL-v1.3b(#1)" : "LPPL-1.3b";
7985  }
7986  else {
7987  lstr = "LPPL-1.3b+";
7988  }
7989  }
7990  else if (INFILE(_TITLE_LATEX_PL13B) || INFILE(_PHR_LATEX_PL13B)) {
7991  lstr = lDebug ? "LPPL-v1.3b(#2)" : "LPPL-1.3b";
7992  }
7993  else if (INFILE(_PHR_LATEX_PL13C_OR_LATER_1) ||
7994  INFILE(_PHR_LATEX_PL13C_OR_LATER_2)) {
7995  if (INFILE(_LT_LATEX_PREAMBLE)) {
7996  lstr = lDebug ? "LPPL-v1.3c(#1)" : "LPPL-1.3c";
7997  }
7998  else {
7999  lstr = "LPPL-1.3c+";
8000  }
8001  }
8002  else if (INFILE(_TITLE_LATEX_PL13C) || INFILE(_PHR_LATEX_PL13C)) {
8003  lstr = lDebug ? "LPPL-v1.3c(#2)" : "LPPL-1.3c";
8004  }
8005  else if (INFILE(_PHR_LATEX_PL13_OR_LATER_1) ||
8006  INFILE(_PHR_LATEX_PL13_OR_LATER_2)) {
8007  if (INFILE(_LT_LATEX_PREAMBLE)) {
8008  lstr = lDebug ? "LPPL-v1.3(#1)" : "LPPL-1.3";
8009  }
8010  else {
8011  lstr = "LPPL-1.3+";
8012  }
8013  }
8014  else if (INFILE(_TITLE_LATEX_PL13) || INFILE(_PHR_LATEX_PL13)) {
8015  lstr = lDebug ? "LPPL-v1.3(#2)" : "LPPL-1.3";
8016  }
8017  else if (INFILE(_PHR_LATEX_PL12_OR_LATER_1) ||
8018  INFILE(_PHR_LATEX_PL12_OR_LATER_2)) {
8019  if (INFILE(_LT_LATEX_PREAMBLE)) {
8020  lstr = lDebug ? "LPPL-v1.2(#1)" : "LPPL-1.2";
8021  }
8022  else {
8023  lstr = "LPPL-1.2+";
8024  }
8025  }
8026  else if (INFILE(_TITLE_LATEX_PL12) || INFILE(_PHR_LATEX_PL12)) {
8027  lstr = lDebug ? "LPPL-v1.2(#2)" : "LPPL-1.2";
8028  }
8029  else if (INFILE(_PHR_LATEX_PL11_OR_LATER_1) ||
8030  INFILE(_PHR_LATEX_PL11_OR_LATER_2)) {
8031  if (INFILE(_LT_LATEX_PREAMBLE)) {
8032  lstr = lDebug ? "LPPL-v1.1(#1)" : "LPPL-1.1";
8033  }
8034  else {
8035  lstr = "LPPL-1.1+";
8036  }
8037  }
8038  else if (INFILE(_TITLE_LATEX_PL11) || INFILE(_PHR_LATEX_PL11)) {
8039  lstr = lDebug ? "LPPL-v1.1(#2)" : "LPPL-1.1";
8040  }
8041  else if (INFILE(_PHR_LATEX_PL10_OR_LATER_1) ||
8042  INFILE(_PHR_LATEX_PL10_OR_LATER_2)) {
8043  if (INFILE(_LT_LATEX_PREAMBLE)) {
8044  lstr = lDebug ? "LPPL-v1.0(#1)" : "LPPL-1.0";
8045  }
8046  else {
8047  lstr = "LPPL-1.0+";
8048  }
8049  }
8050  else if (INFILE(_TITLE_LATEX_PL10) || INFILE(_PHR_LATEX_PL10)) {
8051  lstr = lDebug ? "LPPL-v1.0(#2)" : "LPPL-1.0";
8052  }
8053  else {
8054  lstr = "LPPL";
8055  }
8056  return lstr;
8057 }
8058 
8067 char *agplVersion(char *filetext, int size, int isML, int isPS)
8068 {
8069  char *lstr = NULL_STR;
8070  /* */
8071 #ifdef PROC_TRACE
8072  traceFunc("== agplVersion()\n");
8073 #endif /* PROC_TRACE */
8074  /* */
8075  /*
8076  * Look for version 1 BEFORE version 3; the text of version 1 license says
8077  * you can also license it under GPL version 3... same reasoning goes with
8078  * the actual v3 license (vs the reference).
8079  */
8080  if (INFILE(_PHR_AGPL_10_or_later)
8081  || INFILE(_TITLE_AGPL_10_or_later)
8082  || INFILE(_SPDX_AGPL_10_or_later)
8083  || HASTEXT(_SPDX_AGPL_10plus, REG_EXTENDED)
8084  || HASTEXT(_PHR_AGPL_10plus, REG_EXTENDED))
8085  {
8086  lstr = "AGPL-1.0-or-later";
8087  }
8088  else if (INFILE(_PHR_FSF_V1_ONLY)
8089  || INFILE(_TITLE_AGPL_10_only)
8090  || INFILE(_SPDX_AGPL_10))
8091  {
8092  lstr = "AGPL-1.0-only";
8093  }
8094  else if (INFILE(_PHR_AGPL_30_or_later)
8095  || INFILE(_TITLE_AGPL_30_or_later_ref1)
8096  || INFILE(_TITLE_AGPL_30_or_later)
8097  || INFILE(_SPDX_AGPL_30_or_later)
8098  || HASTEXT(_SPDX_AGPL_30plus, REG_EXTENDED)
8099  || HASTEXT(_PHR_AGPL_30plus, REG_EXTENDED))
8100  {
8101  if (INFILE(_LT_AGPL_30)) {
8102  lstr = lDebug ? "Affero-v3(#1)" : "AGPL-3.0-only";
8103  }
8104  else {
8105  lstr = "AGPL-3.0-or-later";
8106  }
8107  }
8108  else if (HASTEXT(_PHR_AGPL_30_1, REG_EXTENDED) || INFILE(_SPDX_AGPL_30)) {
8109  lstr = "AGPL-3.0-only";
8110  }
8111  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)) {
8112  if (INFILE(_TITLE_GPL3)) {
8113  lstr = lDebug ? "GPLv3(Affero#1)" : "GPL-3.0-only";
8114  }
8115  else if (INFILE(_LT_GPL3ref3)){
8116  lstr = lDebug ? "GPLv3(special)" : "GPL-3.0-only";
8117  }
8118  else {
8119  lstr = lDebug ? "Affero-v3(#2)" : "AGPL-3.0-only";
8120  }
8121  }
8122  else if (INFILE(_TITLE_AGPL_30_only)) {
8123  lstr = lDebug ? "Affero-v3(#3)" : "AGPL-3.0-only";
8124  }
8125  else if (INFILE(_TITLE_GPL3)) {
8126  lstr = lDebug ? "GPLv3(Affero#2)" : "GPL-3.0-only";
8127  }
8128  else if (URL_INFILE(_URL_AGPL3)) {
8129  lstr = lDebug ? "Affero-v3(url)" : "AGPL-3.0-only";
8130  }
8131  else {
8132  lstr = "AGPL";
8133  }
8134  return lstr;
8135 }
8136 
8145 char *gfdlVersion(char *filetext, int size, int isML, int isPS)
8146 {
8147  char *lstr = NULL_STR;
8148  /* */
8149 #ifdef PROC_TRACE
8150  traceFunc("== gfdlVersion()\n");
8151 #endif /* PROC_TRACE */
8152  /* */
8153  /*
8154  * Have to be careful here; the text of the 1.2 license says it's licensed
8155  * under 1.1 or later - have to be careful what we're looking for, and in a
8156  * specific order
8157  */
8158  if (INFILE(_TITLE_GFDL_V13_FULL_LICENSE)) {
8159  lstr = "GFDL-1.3";
8160  /* Full GFDL-1.3 license text has a reference to Creative Commons */
8161  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
8162  lmem[_fCCBY] = 1;
8163  }
8164  }
8165  else if (INFILE(_TITLE_GFDL_V13_OR_LATER)) {
8166  lstr = "GFDL-1.3-or-later";
8167  }
8168  else if (INFILE(_TITLE_GFDL_V13_ONLY)) {
8169  lstr = lDebug ? "GFDL-1.3(#1)" : "GFDL-1.3";
8170  }
8171  else if (INFILE(_TITLE_GFDL_V12_FULL_LICENSE)) {
8172  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
8173  }
8174  else if (INFILE(_PHR_FSF_V12_OR_LATER) ||
8175  INFILE(_TITLE_GFDL_V12_OR_LATER)) {
8176  lstr = "GFDL-1.2-or-later";
8177  }
8178  else if (INFILE(_TITLE_GFDL_V12_ONLY)) {
8179  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
8180  }
8181  else if (INFILE(_TITLE_GFDL_V11_FULL_LICENSE)) {
8182  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
8183  }
8184  else if (INFILE(_PHR_FSF_V11_OR_LATER) ||
8185  INFILE(_TITLE_GFDL_V11_OR_LATER)) {
8186  lstr = "GFDL-1.1-or-later";
8187  }
8188  else if (INFILE(_TITLE_GFDL_V11_ONLY)) {
8189  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
8190  }
8191  else if (INFILE(_PHR_FSF_V12_ONLY)) {
8192  lstr = lDebug ? "GFDL-1.2-only(#2)" : "GFDL-1.2-only";
8193  }
8194  else if (INFILE(_PHR_FSF_V11_ONLY)) {
8195  lstr = lDebug ? "GFDL-1.1-only(#2)" : "GFDL-1.1-only";
8196  }
8197  else {
8198  lstr = "GFDL";
8199  }
8200  return lstr;
8201 }
8202 
8211 char *lgplVersion(char *filetext, int size, int isML, int isPS)
8212 {
8213  char *lstr = NULL_STR;
8214  /* */
8215 #ifdef PROC_TRACE
8216  traceFunc("== lgplVersion()\n");
8217 #endif /* PROC_TRACE */
8218  /* */
8219  if ((INFILE(_PHR_LGPL21_OR_LATER_1)
8220  || INFILE(_PHR_LGPL21_OR_LATER_2)
8221  || HASTEXT(_PHR_LGPL21_OR_LATER_3, REG_EXTENDED)
8222  || HASTEXT(_PHR_LGPL21_OR_LATER_4, REG_EXTENDED))
8223  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8224  {
8225  if (INFILE(_TITLE_LGPL_KDE)) {
8226  lstr = "LGPL-2.1-or-later-KDE-exception";
8227  }
8228  else {
8229  lstr = "LGPL-2.1-or-later";
8230  }
8231  }
8232  else if ((INFILE(_PHR_LGPL3_OR_LATER)
8233  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
8234  || INFILE(_PHR_LGPL3_OR_LATER_ref2)
8235  || HASTEXT(_PHR_LGPL3_OR_LATER_ref3, REG_EXTENDED)
8236  || HASTEXT(_SPDX_LGPL_30plus, REG_EXTENDED)
8237  || HASTEXT(_PHR_LGPL_30plus, REG_EXTENDED))
8238  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8239  {
8240  lstr = "LGPL-3.0-or-later";
8241  }
8242  else if (INFILE(_LT_LGPL3ref) && NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
8243  lstr = "LGPL-3.0-only";
8244  lmem[_mLGPL] = 1;
8245  }
8246  else if (GPL_INFILE(_PHR_LGPL3_ONLY)
8247  || INFILE(_FILE_LGPLv3)
8248  || GPL_INFILE(_PHR_LGPL3_ONLY_ref1)
8249  || GPL_INFILE(_PHR_LGPL3_ONLY_ref2))
8250  {
8251  lstr = "LGPL-3.0-only";
8252  }
8253  else if (INFILE(_PHR_LGPL21_ONLY)
8254  || INFILE(_FILE_LGPLv21)
8255  || URL_INFILE(_URL_LGPL_V21)
8256  || INFILE(_PHR_LGPL21_ONLY_ref)
8257  || INFILE(_PHR_LGPL21_ONLY_ref2)
8258  || INFILE(_PHR_LGPL21_ONLY_ref3)
8259  || INFILE(_PHR_LGPL21_ONLY_ref4))
8260  {
8261  lstr = "LGPL-2.1-only";
8262  }
8263  else if ((INFILE(_PHR_LGPL2_OR_LATER)
8264  || HASTEXT(_PHR_LGPL2_OR_LATER_2, REG_EXTENDED)
8265  || HASTEXT(_PHR_LGPL2_OR_LATER_3, REG_EXTENDED))
8266  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8267  {
8268  lstr = "LGPL-2.0-or-later";
8269  }
8270  else if (RM_INFILE(_PHR_LGPL2_ONLY) || RM_INFILE(_PHR_LGPL2_ONLY_ref1) || INFILE(_FILE_LGPLv2)) {
8271  lstr = "LGPL-2.0-only";
8272  }
8273  else if (INFILE(_PHR_LGPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8274  lstr = "LGPL-1.0-or-later";
8275  }
8276  else if (INFILE(_PHR_LGPL1_ONLY) || INFILE(_PHR_FSF_V1_ONLY)) {
8277  lstr = "LGPL-1.0-only";
8278  }
8279  else if (URL_INFILE(_URL_CCLGPL_V21)) {
8280  lstr = lDebug ? "CC-LGPL-2.1" : "LGPL-2.1-only";
8281  }
8282  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_LGPL)) {
8283  lstr = "CC-LGPL";
8284  }
8285  else if (NY_INFILE(_TEXT_LGPLV3) && NOT_INFILE(_TEXT_LGPLV3_FOOTNOTE) &&
8286  HASREGEX(_TEXT_LGPLV3, filetext)) {
8287  lstr = lDebug ? "LGPL-v3(#2)" : "LGPL-3.0-only";
8288  }
8289  else if (INFILE(_TEXT_LGPLV21) &&
8290  HASREGEX(_TEXT_LGPLV21, filetext)) {
8291  lstr = lDebug ? "LGPL-v2.1(#2)" : "LGPL-2.1-only";
8292  }
8293  else if (INFILE(_TEXT_LGPLV2) &&
8294  HASREGEX(_TEXT_LGPLV2, filetext)) {
8295  lstr = lDebug ? "LGPL-v2(#2)" : "LGPL-2.0-only";
8296  }
8297  else if (INFILE(_SPDX_LGPL_20)) {
8298  lstr = "LGPL-2.0-only";
8299  }
8300  else if (INFILE(_SPDX_LGPL_21)) {
8301  lstr = "LGPL-2.1-only";
8302  }
8303  else if (INFILE(_SPDX_LGPL_30)) {
8304  lstr = "LGPL-3.0-only";
8305  }
8306  else {
8307  lstr = "LGPL";
8308  }
8309  return lstr;
8310 }
8311 
8320 char *gplVersion(char *filetext, int size, int isML, int isPS)
8321 {
8322  char *cp, *lstr = NULL_STR;
8323  /* */
8324 #ifdef PROC_TRACE
8325  traceFunc("== gplVersion()\n");
8326 #endif /* PROC_TRACE */
8327  /* */
8328 
8329  /*
8330  * GPL-3.0-only cases
8331  */
8332  if (GPL_INFILE(_PHR_GPL3_OR_LATER_ref2)
8333  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref3)
8334  || GPL_INFILE(_PHR_GPL3_OR_LATER)
8335  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1)
8336  || HASTEXT(_SPDX_GPL_30plus, REG_EXTENDED)
8337  || HASTEXT(_PHR_GPL_30plus, REG_EXTENDED))
8338  {
8339  if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8340  lstr = "GPL-3.0-or-later";
8341  if (INFILE(_PHR_GPL2_OR_LATER_1)) {
8342  lstr = "GPL-2.0-or-later,GPL-3.0-or-later";
8343  }
8344  }
8345  }
8346  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)
8347  || GPL_INFILE(_PHR_GPL3_ONLY)
8348  || INFILE(_FILE_GPLv3)
8349  || GPL_INFILE(_PHR_GPL3_ONLY_ref1)
8350  || GPL_INFILE(_PHR_GPL3_ONLY_ref2)) {
8351  lstr = lDebug ? "GPL-v3(#2)" : "GPL-3.0-only";
8352  if (INFILE(_PHR_GPL2_OR_LATER_1))
8353  {
8354  lstr = "GPL-2.0-or-later,GPL-3.0-only";
8355  }
8356  }
8357  else if (NY_INFILE(_TEXT_GPLV3) && NOT_INFILE(_TEXT_GPLV3_FOOTNOTE) &&
8358  HASREGEX(_TEXT_GPLV3, filetext)) {
8359  lstr = lDebug ? "GPL-v3(#3)" : "GPL-3.0-only";
8360  }
8361  /*
8362  * GPL-2.0-only cases
8363  */
8364  else if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || INFILE(_TITLE_GPL2_ref1_later)) {
8365  lstr = lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later";
8366  }
8367  else if (HASTEXT(_SPDX_GPL_20_or_later, REG_EXTENDED)) {
8368  lstr = lDebug ? "GPL-2.0-or-later(SPDX)" : "GPL-2.0-or-later";
8369  }
8370  else if (INFILE(_PHR_GPL2_OR_LATER_1)) {
8371  if (INFILE(_TITLE_GPL_KDE)) {
8372  lstr = "GPL-2.0-or-laterKDEupgradeClause";
8373  }
8374  else if (INFILE(_PHR_GPL2_ONLY_2) || INFILE(_PHR_GPL2_ONLY_3)) {
8375  lstr = "GPL-2.0-only";
8376  }
8377  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8378  lstr = lDebug ? "PHR(GPL2_OR_LATER#3)" : "GPL-2.0-or-later";
8379  }
8380  else if (INFILE(_TITLE_GPL2_ref1) || INFILE(_TITLE_GPL2_ref2)) {
8381  lstr = lDebug ? "GPL-2.0-only(title)" : "GPL-2.0-only";
8382  }
8383  }
8384  else if (HASTEXT(_SPDX_GPL_20, REG_EXTENDED)) {
8385  lstr = lDebug ? "GPL-2.0-only(SPDX)" : "GPL-2.0-only";
8386  }
8387  else if (INFILE(_PHR_GPL2_ONLY_4)) {
8388  lstr = "GPL-2.0-only";
8389  }
8390  else if (INFILE(_PHR_GPL2_ONLY_5)) {
8391  lstr = "GPL-2.0-only";
8392  }
8393  else if (GPL_INFILE(_PHR_GPL2_OR_GPL3)) {
8394  lstr = "GPL-2.0-only,GPL-3.0-only";
8395  }
8396  else if (INFILE(_PHR_FSF_V2_ONLY) || INFILE(_PHR_GPL2_ONLY) || INFILE(_PHR_GPL2_ONLY_1) ||
8397  INFILE(_FILE_GPLv2) || INFILE(_LT_GPL_V2_NAMED)) {
8398  lstr = lDebug ? "GPL-v2(#2)" : "GPL-2.0-only";
8399  }
8400  else if (INFILE(_LT_GPL_V2_ref5)) {
8401  lstr = lDebug ? "GPL-2.0-only(ref5)" : "GPL-2.0-only";
8402  }
8403  else if (NY_INFILE(_TEXT_GPLV2)) {
8404  lstr = lDebug ? "GPL-v2(#3)" : "GPL-2.0-only";
8405  }
8406  /*
8407  * GPL-1.0-only cases
8408  */
8409  else if (GPL_INFILE(_PHR_FSF_V1_OR_LATER)
8410  || INFILE(_PHR_GPL1_OR_LATER)
8411  || HASTEXT(_SPDX_GPL_10plus, REG_EXTENDED)
8412  || HASTEXT(_PHR_GPL_10plus, REG_EXTENDED))
8413  {
8414  if (INFILE(_TITLE_GPL1)) {
8415  lstr = lDebug ? "GPL-v1(#1)" : "GPL-1.0-only";
8416  }
8417  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8418  lstr = "GPL-1.0-or-later";
8419  }
8420  }
8421  else if (INFILE(_PHR_FSF_V1_ONLY) || INFILE(_PHR_GPL1_ONLY)) {
8422  lstr = lDebug ? "GPL-v1(#2)" : "GPL-1.0-only";
8423  }
8424  else if (URL_INFILE(_URL_CCGPL_V2)) {
8425  lstr = "GPL-2.0-only";
8426  }
8427  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_GPL)) {
8428  lstr = lDebug ? "GPL(CC_GPL)" : "GPL";
8429  }
8430  else if (NY_INFILE(_TEXT_GPLV1) &&
8431  HASREGEX(_TEXT_GPLV1, filetext)) {
8432  lstr = lDebug ? "GPL-v1(#3)" : "GPL-1.0-only";
8433  }
8434  else if (HASTEXT(_SPDX_GPL_10, REG_EXTENDED)) {
8435  lstr = lDebug ? "GPL-1.0-only(SPDX)" : "GPL-1.0-only";
8436  }
8437  else if (HASTEXT(_SPDX_GPL_30, REG_EXTENDED)) {
8438  lstr = lDebug ? "GPL-3.0-only(SPDX)" : "GPL-3.0-only";
8439  }
8440  /* special case for Debian copyright files
8441  Moved from the beginning here under else if ... is this anymore needed
8442  */
8443  else if (INFILE(_TEXT_GPLV3_CR) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8444  lstr = "GPL-3.0-only";
8445  }
8446  else if (INFILE(_FILE_GPL1) || INFILE(_FILE_GPL2)) {
8447  lstr = lDebug ? "GPL(deb)" : "GPL";
8448  }
8449  /*
8450  * MODULE("GPL") cannot be unambiguously interpreted as GPL-2.0-only
8451  * license. Same statement is used also outside Linux kernel.
8452  * Furthermore, many of the files which have this MODULE statement,
8453  * have explicit GPL license statement. Therefore this is changed
8454  * to GPL.
8455  */
8456  else if (INFILE(_TITLE_MODULE_LICENSE_GPL)) {
8457  lstr = lDebug ? "GPL(linux-kernel)" : "GPL";
8458  }
8459  /*
8460  * Finally let's see if there is a type error in license version
8461  */
8462  else if (INFILE(_PHR_GPL21_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8463  lstr = "GPL-2.1+[sic]";
8464  }
8465  else if (INFILE(_PHR_FSF_V21_ONLY) || INFILE(_PHR_GPL21_ONLY)) {
8466  lstr = lDebug ? "GPL-v2.1[sic]" : "GPL-2.1[sic]";
8467  }
8468  /*
8469  * Special case, HACK: "Debian packaging ... licensed under GPL"
8470  *****
8471  * IF we've scanned the regex that might contain it, then kludge.buf != NULL.
8472  * Make darn sure that pointer IS set to NULL before leaving this routine.
8473  */
8474  if (lstr == NULL_STR && kludge.base != NULL_STR) {
8475 #ifdef PHRASE_DEBUG
8476  printf("GPL-META-CHECK: base %p, so %d eo %d\n",
8477  kludge.base, kludge.sso, kludge.seo);
8478 #endif /* PHRASE_DEBUG */
8479  cp = kludge.base + (kludge.sso < 256 ? 0 : kludge.sso-256);
8480  if (HASREGEX(_LT_GPL_META_DEBIAN, cp)) {
8481  lstr = "GPL-Meta";
8482  }
8483  kludge.base = NULL_STR;
8484  }
8485  if (lstr == NULL_STR && NOT_INFILE(_PHR_JYTHON_NOTGPL) && !HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0) && !HASTEXT(_LT_OPENBSD_GPL_EXCEPTION, 0)) {
8486  lstr = lDebug ? "GPL(NULL)" : "GPL";
8487  }
8488  return lstr;
8489 }
8490 
8499 char *cplVersion(char *filetext, int size, int isML, int isPS)
8500 {
8501  char *lstr = NULL_STR;
8502  /* */
8503 #ifdef PROC_TRACE
8504  traceFunc("== cplVersion()\n");
8505 #endif /* PROC_TRACE */
8506  /* */
8507  if (INFILE(_TITLE_CPL_10)) {
8508  lstr = "CPL-1.0";
8509  }
8510  else if (URL_INFILE(_URL_CPL_10)) {
8511  lstr = "CPL-1.0";
8512  }
8513  else if (INFILE(_TITLE_CPL_05)) {
8514  lstr = "CPL-0.5";
8515  }
8516  else {
8517  lstr = "CPL";
8518  }
8519  return lstr;
8520 }
8521 
8530 char *ccVersion(char *filetext, int size, int isML, int isPS)
8531 {
8532  char *lstr = NULL_STR;
8533  /* */
8534 #ifdef PROC_TRACE
8535  traceFunc("== ccVersion()\n");
8536 #endif /* PROC_TRACE */
8537  /*
8538  * Creative Commons Attribution-ShareAlike
8539  */
8540  if (INFILE(_TITLE_CC_BY_SA_10) || URL_INFILE(_URL_CC_BY_SA_10)) {
8541  lstr = "CC-BY-SA-1.0";
8542  }
8543  else if (INFILE(_TITLE_CC_BY_SA_20) || URL_INFILE(_URL_CC_BY_SA_20)) {
8544  lstr = "CC-BY-SA-2.0";
8545  }
8546  else if (INFILE(_TITLE_CC_BY_SA_25) || URL_INFILE(_URL_CC_BY_SA_25)) {
8547  lstr = "CC-BY-SA-2.5";
8548  }
8549  else if (INFILE(_TITLE_CC_BY_SA_30) || URL_INFILE(_URL_CC_BY_SA_30)) {
8550  lstr = "CC-BY-SA-3.0";
8551  }
8552  else if (INFILE(_PHR_CC_BY_SA_30)) {
8553  lstr = "CC-BY-SA-3.0";
8554  }
8555  else if (INFILE(_TITLE_CC_BY_SA_40) || URL_INFILE(_URL_CC_BY_SA_40)) {
8556  lstr = "CC-BY-SA-4.0";
8557  }
8558  else if (URL_INFILE(_URL_CC_BY_SA_20)) {
8559  lstr = "CC-BY-SA-2.0";
8560  }
8561  else if (INFILE(_TITLE_CC_BY_SA) || URL_INFILE(_URL_CC_BY_SA)) {
8562  lstr = lDebug ? "CCA-SA(1)" : "CC-BY-SA";
8563  }
8564  /*
8565  * Creative Commons Attribution-NonCommercial-ShareAlike
8566  */
8567  else if (INFILE(_TITLE_CC_BY_NC_SA_40) || URL_INFILE(_URL_CC_BY_NC_SA_40)) {
8568  lstr = "CC-BY-NC-SA-4.0";
8569  }
8570  else if (INFILE(_TITLE_CC_BY_NC_SA_30) || URL_INFILE(_URL_CC_BY_NC_SA_30)) {
8571  lstr = "CC-BY-NC-SA-3.0";
8572  }
8573  else if (INFILE(_TITLE_CC_BY_NC_SA_25) || URL_INFILE(_URL_CC_BY_NC_SA_25)) {
8574  lstr = "CC-BY-NC-SA-2.5";
8575  }
8576  else if (INFILE(_TITLE_CC_BY_NC_SA_20) || URL_INFILE(_URL_CC_BY_NC_SA_20)) {
8577  lstr = "CC-BY-NC-SA-2.0";
8578  }
8579  else if (INFILE(_TITLE_CC_BY_NC_SA_10) || URL_INFILE(_URL_CC_BY_NC_SA_10)) {
8580  lstr = "CC-BY-NC-SA-1.0";
8581  }
8582  /*
8583  * Creative Commons NonCommercial NoDerivs
8584  */
8585  else if (INFILE(_TITLE_CC_BY_NC_ND_40) || URL_INFILE(_URL_CC_BY_NC_ND_40)) {
8586  lstr = "CC-BY-NC-ND-4.0";
8587  }
8588  else if (INFILE(_TITLE_CC_BY_NC_ND_30) || URL_INFILE(_URL_CC_BY_NC_ND_30)) {
8589  lstr = "CC-BY-NC-ND-3.0";
8590  }
8591  else if (INFILE(_TITLE_CC_BY_NC_ND_25) || URL_INFILE(_URL_CC_BY_NC_ND_25)) {
8592  lstr = "CC-BY-NC-ND-2.5";
8593  }
8594  else if (INFILE(_TITLE_CC_BY_NC_ND_20) || URL_INFILE(_URL_CC_BY_NC_ND_20)) {
8595  lstr = "CC-BY-NC-ND-2.0";
8596  }
8597  else if (INFILE(_TITLE_CC_BY_NC_ND_10) || INFILE(_TITLE_CC_BY_NC_ND_10_1) || URL_INFILE(_URL_CC_BY_NC_ND_10)) {
8598  lstr = "CC-BY-NC-ND-1.0";
8599  }
8600  /*
8601  * Creative Commons NonCommercial
8602  */
8603  else if (INFILE(_TITLE_CC_BY_NC_40) || URL_INFILE(_URL_CC_BY_NC_40)) {
8604  lstr = "CC-BY-NC-4.0";
8605  }
8606  else if (INFILE(_TITLE_CC_BY_NC_30) || URL_INFILE(_URL_CC_BY_NC_30)) {
8607  lstr = "CC-BY-NC-3.0";
8608  }
8609  else if (INFILE(_TITLE_CC_BY_NC_25) || URL_INFILE(_URL_CC_BY_NC_25)) {
8610  lstr = "CC-BY-NC-2.5";
8611  }
8612  else if (INFILE(_TITLE_CC_BY_NC_20) || URL_INFILE(_URL_CC_BY_NC_20)) {
8613  lstr = "CC-BY-NC-2.0";
8614  }
8615  else if (INFILE(_TITLE_CC_BY_NC_10) || URL_INFILE(_URL_CC_BY_NC_10)) {
8616  lstr = "CC-BY-NC-1.0";
8617  }
8618  /*
8619  * Creative Commons Attribution-NoDerivatives
8620  */
8621  else if (INFILE(_TITLE_CC_BY_ND_40) || URL_INFILE(_URL_CC_BY_ND_40)) {
8622  lstr = "CC-BY-ND-4.0";
8623  }
8624  else if (INFILE(_TITLE_CC_BY_ND_30) || URL_INFILE(_URL_CC_BY_ND_30)) {
8625  lstr = "CC-BY-ND-3.0";
8626  }
8627  else if (INFILE(_TITLE_CC_BY_ND_25) || URL_INFILE(_URL_CC_BY_ND_25)) {
8628  lstr = "CC-BY-ND-2.5";
8629  }
8630  else if (INFILE(_TITLE_CC_BY_ND_20) || URL_INFILE(_URL_CC_BY_ND_20)) {
8631  lstr = "CC-BY-ND-2.0";
8632  }
8633  else if (INFILE(_TITLE_CC_BY_ND_10) || URL_INFILE(_URL_CC_BY_ND_10)) {
8634  lstr = "CC-BY-ND-1.0";
8635  }
8636  /*
8637  * Creative Commons Attribution
8638  */
8639  else if (INFILE(_TITLE_CC_BY_10) || URL_INFILE(_URL_CC_BY_10)) {
8640  lstr = "CC-BY-1.0";
8641  }
8642  else if (INFILE(_TITLE_CC_BY_20) || URL_INFILE(_URL_CC_BY_20)) {
8643  lstr = "CC-BY-2.0";
8644  }
8645  else if (INFILE(_TITLE_CC_BY_25) || URL_INFILE(_URL_CC_BY_25)) {
8646  lstr = "CC-BY-2.5";
8647  }
8648  else if (INFILE(_TITLE_CC_BY_30) || URL_INFILE(_URL_CC_BY_30)) {
8649  lstr = "CC-BY-3.0";
8650  }
8651  else if (INFILE(_TITLE_CC_BY_40) || URL_INFILE(_URL_CC_BY_40)) {
8652  lstr = "CC-BY-4.0";
8653  }
8654  /*
8655  * Creative Commons CC0
8656  */
8657  else if (INFILE(_TITLE_CC0_10_2)) {
8658  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
8659  }
8660  else if (INFILE(_PHR_CC0_2)) {
8661  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
8662  }
8663  else if (URL_INFILE(_URL_CC0)) {
8664  lstr = lDebug ? "CC0(URL)" : "CC0-1.0";
8665  }
8666  else if (URL_INFILE(_URL_CC_PDDC)) {
8667  lstr = lDebug ? "CC(PD)" : "CC-PDDC";
8668  pd = 1;
8669  }
8670  else if (INFILE(_TITLE_CCPL)) {
8671  INTERESTING("CCPL");
8672  }
8673  else if (INFILE(_TITLE_CC_BY)) {
8674  lstr = lDebug ? "CCA(1)" : "CC-BY";
8675  }
8676  else {
8677  lstr = lDebug ? "CCA(def)" : "CC-BY";
8678  }
8679  lmem[_fCCBY] = 1;
8680  return lstr;
8681 }
8682 
8699 int findPhrase(int index, char *filetext, int size, int isML, int isPS,
8700  int qType)
8701 {
8702  char *ptr = NULL_STR;
8703  char *q = ltsr+index;
8704  char *cp = 0;
8705  int ret;
8706  int i;
8707  int j;
8708  int n;
8709  int wordMatch = 0;
8710  int metaKludge = 0;
8711  int saved = 0;
8712  int sso;
8713  int seo;
8714  item_t *sp;
8715  item_t *op;
8716  list_t *lp;
8717  licText_t *ltp;
8718 #ifdef PARSE_STOPWATCH
8719  DECL_TIMER; /* timer declaration */
8720  char timerName[64];
8721 #endif /* PARSE_STOPWATCH */
8722 
8723 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG) || defined(DOCTOR_DEBUG)
8724  traceFunc("== findPhrase(%d, %p, %d, %d, %d, %d)\n", index, filetext,
8725  size, isML, isPS, qType);
8726  traceFunc("... (regex) \"%s\"\n", _REGEX(index));
8727  traceFunc("... (seed) \"%s\"\n", _SEED(index));
8728 #endif /* PROC_TRACE || PHRASE_DEBUG || DOCTOR_DEBUG */
8729 
8730  ltp = licText + index; /* &licText[index] */
8731  if (ltp->tseed == NULL_STR) {
8732  LOG_FATAL("Regex #%d not suitable for findPhrase()", index)
8733  Bail(-__LINE__);
8734  }
8735  *q |= LTSR_SMASK; /* init: tested, no match */
8736 #ifdef PARSE_STOPWATCH
8737  (void) sprintf(timerName, "findPhrase(%03d): ", index);
8738  START_TIMER;
8739 #endif /* PARSE_STOPWATCH */
8740 #if (DEBUG > 5)
8741  printf("findPhrase: firstword[%d] == \"%s\", used = %d\n", index,
8742  ltp->tseed, searchList.used);
8743 #endif /* DEBUG > 5 */
8744  /*
8745  * See if the first-word of the requested entry has been searched
8746  * previously. The entry we get from listGetItem() refCount (val) field is:
8747  * =0 if this is the first search for this word (non-zero == "seen it"!)
8748  * <0 if the word was NOT FOUND
8749  * >0 if we have doctored-text results cached
8750  */
8751  if ((sp = listGetItem(&searchList, ltp->tseed)) == NULL_ITEM) {
8752  LOG_FATAL("search cache")
8753  Bail(-__LINE__);
8754  }
8755  if (sp->refCount < 0) { /* tseed not found in text */
8756  sp->refCount--;
8757 #ifdef PARSE_STOPWATCH
8758  END_TIMER; /* stop the timer */
8759  (void) strcat(timerName, "Cache-NO - ");
8760  (void) strcat(timerName, ltp->tseed);
8761  PRINT_TIMER(timerName, 0);
8762 #endif /* PARSE_STOPWATCH */
8763  return(0);
8764  }
8765  else if (sp->refCount == 0) { /* e.g., first occurence */
8766 
8767  /*
8768  * Since this is the first search of this word, see if it's in the text.
8769  * NOTE: getInstances() returns a pointer to static (non-allocated) storage
8770  */
8771  if ((cur.nLines) <= 5) {
8772  i = 1;
8773  j = 2;
8774  } else if ((size / cur.nLines) <= 10) {
8775  i = 2;
8776  j = 4;
8777  } else {
8778  i = 3;
8779  j = 6;
8780  }
8781 
8782  /* change to not get record offsets since there is a good sized memory
8783  leak in that code */
8784  //ptr = getInstances(filetext, size, i, j, sp->str, YES);
8785  ptr = getInstances(filetext, size, i, j, sp->str, NO);
8786 
8787  if (ptr == NULL_STR) {
8788  sp->refCount = -1;
8789  /* sp->buf = NULL_STR; */
8790 #ifdef PARSE_STOPWATCH
8791  END_TIMER; /* stop the timer */
8792  (void) strcat(timerName, "tseed-NO - ");
8793  (void) strcat(timerName, ltp->tseed);
8794  PRINT_TIMER(timerName, 0);
8795 #endif /* PARSE_STOPWATCH */
8796  return(0); /* known !match */
8797  }
8798  sp->buf = copyString(ptr, "paragraph");
8799 #ifdef MEMSTATS
8800  printf("... adding %d bytes (search-lookup: \"%s\")\n",
8801  strlen(sp->buf), sp->str);
8802 #endif /* MEMSTATS */
8803  /*
8804  * If the search-seed and regex are the same, we found what we're looking
8805  * for. Else, use doctorBuffer() to strip out punctuation, XML/HTML
8806  * directives, etc.
8807  */
8808 #ifdef PARSE_STOPWATCH
8809  START_TIMER;
8810 #endif /* PARSE_STOPWATCH */
8811 #ifdef DOCTOR_DEBUG
8812  printf(" ... doctoring buffer for \"%s\"\n", sp->str);
8813 #endif /* DOCTOR_DEBUG */
8814  (void) doctorBuffer(sp->buf, isML, isPS, NO);
8815 #ifdef PARSE_STOPWATCH
8816  RESET_TIMER;
8817  (void) sprintf(timerName, "... doctor(%03d): %s (%d)",
8818  index, ltp->tseed, strlen(sp->buf));
8819  PRINT_TIMER(timerName, 0);
8820 #endif /* PARSE_STOPWATCH */
8821  }
8822  sp->refCount++; /* incr ref-count for this seed */
8823  /*
8824  * We need populate the list of "paragraph matches" with offsets in the
8825  * doctored-up buffers; this seems the best place to do it.
8826  */
8827  op = listGetItem(&cur.offList, sp->str);
8828  if (op->nMatch <= 0) {
8829  LOG_FATAL("File-offset list, nMatch(%s): bad entry", sp->str)
8830  Bail(-__LINE__);
8831  }
8832 #if DEBUG>5
8833  printf("matches for key \"%s\": %d\n", sp->str, op->nMatch);
8834 #endif /* DEBUG>5 */
8835  n = strlen(sp->buf);
8836  lp = (list_t *)op->bList;
8837  if ((lp) && (lp->items[0].bDocLen == 0)) {
8838  if (op->nMatch == 1) {
8839  lp->items[0].bDocLen = n;
8840  } else {
8841  ptr = sp->buf;
8842  i = j = 0; /* i is index, j is total offset */
8843  while (strGrep(" xyzzy ", ptr, REG_ICASE)) {
8844  lp->items[i++].bDocLen = j + cur.regm.rm_so;
8845  ptr += cur.regm.rm_eo;
8846  j += (cur.regm.rm_eo + 7); /* strlen(" xyzzy ") */
8847  }
8848  lp->items[i].bDocLen = n + 7; /* last paragraph */
8849  }
8850  }
8851  if (ltp->tseed == ltp->regex) { /* e.g., regex IS seed/key */
8852  wordMatch++;
8853  ret = 1;
8854  } else {
8855  metaKludge = ((qType == 2) && (index == _LT_GPLref1));
8856  if (metaKludge || qType == 4) {
8857  saved = 1;
8858  gl.flags |= FL_SAVEBASE;
8859  }
8860  ret = HASREGEX_RI(index, sp->buf);
8861  if (saved) {
8862  if (ret) {
8863  kludge.base = cur.matchBase;
8864  kludge.sso = cur.regm.rm_so;
8865  kludge.seo = cur.regm.rm_eo;
8866  }
8867  gl.flags &= ~FL_SAVEBASE;
8868  }
8869  }
8870  sso = cur.regm.rm_so; /* do NOT modify this!! */
8871  seo = cur.regm.rm_eo; /* ... or this, either! */
8872  if (ret && !wordMatch) {
8873  *q = LTSR_YES; /* remember this "yes" search result */
8874 
8875  /*
8876  * VERY low-level string-search kludges happen here. This is VERY ugly!!
8877  *****
8878  * If we used idxGrep to search for "GPL" in a "doctored" buffer, we do NOT
8879  * want to match "lesser GPL" or "library GPL" in our searches (it's the
8880  * wrong license name/title). Unfortunately, two aliases for LGPL are
8881  * exactly those above. If we match "GPL" with a wildcard preceeding it, it
8882  * JUST MIGHT BE those words. Rather than perform 2 exclusionary searches
8883  * one for "lesser gpl" and another for "library gpl", look here and if we
8884  * find it, (ugh) KLUDGE the return value to indicate "no match"...
8885  *****
8886  * However, since it's here, it's now extensible. Next search-string kludge
8887  * (that cannot be quickly fixed via changing a regex) should be number 2.
8888  * Just make a new macro (defined above parseLicenses), ala GPL_INFILE().
8889  */
8890  if ((qType > 0) && !wordMatch) {
8891  if ((qType > 4) || (qType < 0)) {
8892  LOG_FATAL("Unknown string-search kludge %d", qType)
8893  Bail(-__LINE__);
8894  }
8895  /*
8896  * Special filter #1: over-write matched text with commas -- this choice is
8897  * significant because doctorBuffer() ensures 'stripped' text has no commas
8898  */
8899  if (qType == 1) { /* destroy text-match */
8900  cp = sp->buf+seo;
8901  ptr = sp->buf+sso;
8902  ltsr[index] = 0; /* reset search cache */
8903  while (ptr <= cp) {
8904  *ptr++ = ',';
8905  }
8906 #ifdef DEBUG
8907  if (lDiags) {
8908  printf("Now, buf %p contains:\n%s\n",
8909  sp->buf, (char *)sp->buf);
8910  }
8911 #endif /* DEBUG */
8912  /*
8913  * Special filter #2: various checks to make sure LGPL/GFDL/GPL license
8914  * references are not confused -- they CAN look quite similar. Specifically
8915  * we don't want to confuse a SINGLE reference to the LGPL as a reference to
8916  * the GPL. BUT -- sometimes references to BOTH are in the same file.
8917  */
8918  }
8919  if ((qType == 2) &&
8920  HASREGEX(_TEXT_LGPL_NOT_GPL, sp->buf+sso) &&
8921  !HASREGEX(_TEXT_GPL_NOT_LGPL, sp->buf+sso) &&
8922  NOT_INFILE(_TEXT_LGPL_DETAILS) &&
8923  NOT_INFILE(_TEXT_LICSET)) {
8924  if (lDiags) {
8925  printf("... \"GPL\" -> LGPL (%d)\n",
8926  index);
8927  }
8928  ltsr[_TEXT_LGPL_NOT_GPL] = LTSR_YES;
8929  ret = 0;
8930  *q = LTSR_NO; /* oops, make that a "no" */
8931  } else if ((qType == 2) &&
8932  HASREGEX(_TEXT_GFDL_NOT_GPL, sp->buf+sso)) {
8933  if (lDiags) {
8934  printf("... \"GPL\" -> GFDL (%d)\n",
8935  index);
8936  }
8937  ltsr[_TEXT_GFDL_NOT_GPL] = LTSR_YES;
8938  ret = 0;
8939  *q = LTSR_NO;
8940  } else if ((index == _LT_GPL3ref) && (qType == 2)) {
8941  if (HASREGEX(_PHR_QEMU_NOT_GPLV3, sp->buf+sso)) {
8942  if (lDiags) {
8943  printf("... \"GPL\" -> QEMU\n");
8944  }
8945  ltsr[_PHR_QEMU_NOT_GPLV3] = LTSR_YES;
8946  ret = 0;
8947  *q = LTSR_NO;
8948  } else if (INFILE(_PHR_SCF_HOWTO)) {
8949  if (lDiags) {
8950  printf("... SCF-Howto\n");
8951  }
8952  ret = 0;
8953  *q = LTSR_NO;
8954  } else if (HASREGEX(_TEXT_DRBD_NOT_GPL3, sp->buf)) {
8955  if (lDiags) {
8956  printf("... mysgl/DRBD\n");
8957  }
8958  ltsr[_TEXT_DRBD_NOT_GPL3] = LTSR_YES;
8959  ret = 0;
8960  *q = LTSR_NO;
8961  }
8962 #ifdef GPLV2_BEATS_GPLV3
8963  else if (strNbuf(sp->buf+sso, "version 2")) {
8964  if (sp->buf + sso + cur.regm.rm_eo <
8965  sp->buf + seo) {
8966  if (lDiags) {
8967  printf("... v%c!\n", *cp);
8968  }
8969  ret = 0;
8970  *q = LTSR_NO;
8971  }
8972  }
8973 #endif /* GPLV2_BEATS_GPLV3 */
8974  } else if ((index == _PHR_GPL3_OR_LATER) &&
8975  (qType == 2) &&
8976  strNbuf(sp->buf+sso, "v2 ")) {
8977  if (lDiags) {
8978  printf("... v2 and version 3\"\n");
8979  }
8980  ret = 0;
8981  *q = LTSR_NO;
8982  } else if ((index == _PHR_GPL3_OR_LATER) &&
8983  (qType == 2) &&
8984  HASREGEX(_TEXT_NOT_GPLV3_DRAFT, sp->buf+sso)) {
8985  if (lDiags) {
8986  printf("... exclude \"GPLv3 draft\"\n");
8987  }
8988  ltsr[_TEXT_NOT_GPLV3_DRAFT] = LTSR_YES;
8989  ret = 0;
8990  *q = LTSR_NO;
8991  } else if ((index == _PHR_GPL3_ONLY) &&
8992  (qType == 2) &&
8993  HASREGEX(_TEXT_NOT_LIBSTDC, sp->buf+sso)) {
8994  if (lDiags) {
8995  printf("... exclude libstdc vers\"\n");
8996  }
8997  ltsr[_TEXT_NOT_LIBSTDC] = LTSR_YES;
8998  ret = 0;
8999  *q = LTSR_NO;
9000  }
9001  /*
9002  * POSIX regex matches the longest string possible, and a '3' can follow a
9003  * "version 2 or later phrase" -- we want to match the '2'. "Vim" has this:
9004  *****
9005  * e) When the GNU General Public License (GPL) applies to the changes,
9006  * you may distribute the modified code under the GNU GPL version 2 or
9007  * any later version.
9008  * 3) A message must be added, at least in the output of the ":version"
9009  * command and in the intro screen, such that the user ...
9010  *****
9011  * So... if there's a NUMBER (!= '3') between the word "version" and the
9012  * end-of-match (at sp->buf+seo), that matches the number AND NOT the 3.
9013  */
9014  else if ((qType == 2) &&
9015  ((index == _PHR_GPL3_ONLY) || (index == _PHR_LGPL3_ONLY))) {
9016  if (strNbuf(sp->buf+sso, "version") ||
9017  strNbuf(sp->buf+sso, "v3")) {
9018  cp = sp->buf + cur.regm.rm_eo;
9019  } else {
9020  cp = sp->buf + seo; /* "nil" loop */
9021  }
9022  for (ptr = sp->buf+seo; cp < ptr; cp++) {
9023  if (isdigit(*cp) && *cp != '3') {
9024  if (lDiags) {
9025  printf("... vers %c!\n",
9026  *cp);
9027  }
9028  ret = 0;
9029  *q = LTSR_NO;
9030  break;
9031  }
9032  }
9033  } else if (index == _PHR_FSF_V3_ONLY && qType == 2) {
9034  if (strNbuf(sp->buf+sso, "version")) {
9035 #ifdef GPLV2_BEATS_GPLV3
9036  ptr = sp->buf + sso + cur.regm.rm_so + 7;
9037 #endif /* GPLV2_BEATS_GPLV3 */
9038  cp = strchr(sp->buf+sso, '3');
9039  if (strncasecmp(cp, "3 tlb", 5) == 0) {
9040  if (lDiags) {
9041  printf("... v3 tlb\n");
9042  }
9043  ret = 0;
9044  *q = LTSR_NO;
9045  }
9046 #ifdef GPLV2_BEATS_GPLV3
9047  else if ((*ptr == ' ') && (*(ptr+1) == '2')) {
9048  if (lDiags) {
9049  printf("... v2, !v3\n");
9050  }
9051  ret = 0;
9052  *q = LTSR_NO;
9053  }
9054 #endif /* GPLV2_BEATS_GPLV3 */
9055  }
9056  else if (strNbuf(sp->buf+sso, "v3")) {
9057  cp = sp->buf + sso + cur.regm.rm_so;
9058  if (strncasecmp(cp-4, "arm ", 4) == 0) {
9059  if (lDiags) {
9060  printf("... arm v3\n");
9061  }
9062  ret = 0;
9063  *q = LTSR_NO;
9064  } else if (strncasecmp(cp, "v3020 ",
9065  6) == 0) {
9066  if (lDiags) {
9067  printf("... v3020\n");
9068  }
9069  ret = 0;
9070  *q = LTSR_NO;
9071  }
9072  }
9073  } else if ((index == _LT_LGPL_OR) &&
9074  (strncasecmp(sp->buf+sso, "or fitness f", 12) == 0)) {
9075  if (lDiags) {
9076  printf("... merch-or-fitness\n");
9077  }
9078  ret = 0;
9079  *q = LTSR_NO;
9080  } else if ((index == _LT_GPLref1) &&
9081  (qType == 2) &&
9082  INFILE(_PHR_LIC_CHANGE)) {
9083  if (lDiags) {
9084  printf("... exclude lic-change\"\n");
9085  }
9086  ret = 0;
9087  *q = LTSR_NO;
9088  } else if ((qType == 2) && (sso > 4)) {
9089  cp = sp->buf+sso-4;
9090  if (strncasecmp(cp, "not ", 4) == 0) {
9091  if (lDiags) {
9092  printf("... NOT l?gpl-ish\n");
9093  }
9094  ret = 0;
9095  *q = LTSR_NO; /* "no" */
9096  }
9097  } else if (qType == 3 && INFILE(_PHR_ARTISTIC_DESC1)) {
9098  /*
9099  Special filter #3: match specific versions of Perl
9100  references, but not all
9101  */
9102  if (lDiags) {
9103  printf("... exclude artistic defn\"\n");
9104  }
9105  ret = 0;
9106  *q = LTSR_NO;
9107  } else if (qType == 4) {
9108  /*
9109  Special filter #4: look for a numerical version
9110  number IFF NOT IN a string of (at least) 4 numerical
9111  characters (signifying a year/datestamp)
9112  */
9113  char *x;
9114  x = cp = cur.matchBase + sso;
9115  ptr = cp - (sso < 100 ? sso : 100);
9116  while (!isdigit(*cp)) {
9117  cp++;
9118  }
9119  if (isdigit(*(cp+1)) && isdigit(*(cp+2)) && isdigit(*(cp+3))) {
9120  if (lDiags) {
9121  printf("... don't want year\n");
9122  }
9123  ret = 0;
9124  *q = LTSR_NO;
9125  } else if (HASREGEX(_TEXT_GNU_HELLO_23, ptr)) {
9126  if (lDiags) {
9127  printf("... gnu example\n");
9128  }
9129  ret = 0;
9130  *q = LTSR_NO;
9131  }
9132 #ifdef GPLV2_BEATS_GPLV3
9133  else if (strncasecmp(x-5, "v2 or ", 5) == 0) {
9134  if (lDiags) {
9135  printf("... v2 or v3\n");
9136  }
9137  ret = 0;
9138  *q = LTSR_NO;
9139  }
9140 #endif /* GPLV2_BEATS_GPLV3 */
9141  /*
9142  * Special case - don't know where better to look for this... other strings
9143  * match TEXT_GPLV3 and should be filtered. This should be a fairly low
9144  * frequency check.
9145  */
9146  else if (index == _TEXT_GPLV3) {
9147  x = cur.matchBase + seo;
9148  if (isdigit(*x) && *x != '0') {
9149  if (lDiags) {
9150  printf("... v3#!0\n");
9151  }
9152  ret = 0;
9153  *q = LTSR_NO;
9154  }
9155  }
9156  }
9157  }
9158 #if (DEBUG > 5)
9159  printf(">>===> \"%s\"\n", ltp->regex);
9160 #endif /* DEBUG > 5 */
9161  }
9162 #ifdef PARSE_STOPWATCH
9163  END_TIMER; /* stop the timer */
9164  (void) sprintf(timerName, "findPhrase(%03d): RET=%d (%s:%d)", index,
9165  ret, ltp->tseed, strlen(sp->buf));
9166  PRINT_TIMER(timerName, 0);
9167 #endif /* PARSE_STOPWATCH */
9168  if (lDiags && ret) {
9169  printRegexMatch(index, NO);
9170  /* locateRegex(filetext, op, index, size, sso, seo); */
9171  }
9172  return(ret);
9173 }
9174 
9189 void locateRegex(char *text, item_t *op, int index, int size, int sso, int seo)
9190 {
9191  int i;
9192  int j;
9193  int n;
9194  int off;
9195  int len;
9196  item_t *sp;
9197  list_t *lp = (list_t *)op->bList;
9198  char *cp;
9199  char *ptr;
9200  char *start;
9201  char save;
9202 
9203 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9204  traceFunc("== locateRegex(%p, %p, %d, %d, %d, %d)\n", text, op, index,
9205  size, sso, seo);
9206 #endif /* PROC_TRACE || PHRASE_DEBUG */
9207 
9208  /*
9209  * First step, simplest case - try to locate the regex in the file. It
9210  * *might* be that easy (but not very often, it turns out).
9211  */
9212  if (idxGrep(index, text, REG_ICASE|REG_EXTENDED)) {
9213  saveRegexLocation(index, cur.regm.rm_so,
9214  cur.regm.rm_eo - cur.regm.rm_so, YES);
9215  return;
9216  }
9217  /*
9218  * Regex is not directly in the raw text file, so now we need to try to
9219  * map a location from a 'doctored buffer' to a location in the original
9220  * text file. Not impossible, yet not overly straight-forward.
9221  */
9222 #ifdef DEBUG
9223  listDump(lp, NO);
9224  printf("Doc-buffer match @ %d:%d\n", sso, seo);
9225  printf("Possible \"%s\" entries to search: %d (%d)\n", op->str,
9226  op->nMatch, lp->used);
9227  for (n = i = 0; (sp=listIterate(lp)); i++) {
9228  printf("Ent[%d]: bDocLen %d (len %d) == file %d+%d (%d)\n",
9229  i, sp->bDocLen, (sp->bDocLen)-n, sp->bStart, sp->bLen,
9230  sp->bStart+sp->bLen);
9231  n = sp->bDocLen;
9232  }
9233 #endif /* DEBUG */
9234  /*
9235  * At this point, the matched phrase should be bounded by {sso} and {seo}
9236  * as offsets within the doctored buffer we're scanning. We also have a
9237  * mapping of offsets within the doctored buffer to more-or-less where it
9238  * exists in the original (raw text) file -- so go find it. Walk through the
9239  * offsets-list; the entry with the LOWEST end-of-doctored-buffer offset
9240  * exceeding the value of 'sso' IS the paragraph where we found the regex.
9241  */
9242  i = -1;
9243  j = -1;
9244  n = 0;
9245  while ((sp = listIterate(lp))) {
9246  if (sso > sp->bDocLen) {
9247  n = sp->bDocLen;
9248  continue;
9249  }
9250  i = sp->bStart;
9251  j = sp->bLen;
9252 #ifdef DEBUG
9253  printf("sso(%d), limit(%d), Possible: @%d+%d\n", sso,
9254  sp->bDocLen, i, j);
9255 #endif /* DEBUG */
9256  listIterationReset(lp);
9257  break;
9258  }
9259  if (i < 0) { /* something is wrong... */
9260  LOG_FATAL("Cannot map reduced-text to raw file contents (#%d)", index)
9261  Bail(-__LINE__);
9262  }
9263  /*
9264  * Remember, the length of text matched in the doctored-buffer will likely
9265  * not match the length of the "same" (unmodified) text in the raw file!
9266  * And, an offset within the doctored buffer CANNOT be any larger than the
9267  * corresponding text segment in the raw file (we only _remove_ characters).
9268  * Next, find the last occurrence (in the raw file) of the last word in
9269  * the license-footprint
9270  */
9271  sso -= n;
9272  seo -= n;
9273  off = i + sso;
9274  len = j - sso;
9275 #ifdef DEBUG
9276  printf("WINDOW-first: offset %d, len %d\n", off, len);
9277 #endif /* DEBUG */
9278  /*printf("BUF: %s\n", sp->buf);*/
9279  start = _REGEX(index);
9280  cp = start + licSpec[index].text.csLen - 1; /* 'end' of regex */
9281 #ifdef DEBUG
9282  printf("EO-Regex, cp == '%c'\n", *cp);
9283 #endif /* DEBUG */
9284  n = 0;
9285  while (*cp == ' ') {
9286  cp--;
9287  }
9288  while ((n == 1) || ((cp != start) && (*cp != ' ') && (*cp != ')') &&
9289  (*cp != '}'))) {
9290  if (*cp == ']') {
9291  n = 1;
9292  } else if (*cp == '[') {
9293  n = 0;
9294  }
9295  if (cp == _REGEX(index)) {
9296  cp = ":no:match";
9297  break;
9298  }
9299  cp--;
9300  }
9301  if (*cp == ')') {
9302  cp--;
9303  n = 1;
9304  while (n) {
9305  if (*cp == '(') {
9306  n--;
9307  } else if (*cp == ')') {
9308  n++;
9309  }
9310  /*printf("'%c' -- n %d\n", *cp, n);*/
9311  if (cp != start) {
9312  cp--;
9313  }
9314  }
9315  while ((cp != start) && (*cp != ' ') && (*cp != '.') && (*cp != ')')
9316  && (*cp != ']') && (*cp != '}')) {
9317  /*printf("skip '%c'...\n", *cp);*/
9318  cp--;
9319  }
9320 #ifdef DEBUG
9321  printf("_END_@%ld '%c'\n", cp-_REGEX(index), *cp);
9322 #endif /* DEBUG */
9323  }
9324  if (cp != start) {
9325  if (*cp != '.') {
9326  cp++;
9327  }
9328  if ((*cp == '?') || (*cp == '+')) {
9329  cp++;
9330  }
9331  }
9332  ptr = sp->buf + sso;
9333  i = j = 0;
9334 #ifdef DEBUG
9335  printf("SEARCH @foot is now \"%s\"\n", cp);
9336 #endif /* DEBUG */
9337  while (strGrep(cp, ptr, REG_ICASE|REG_EXTENDED)) {
9338  i++;
9339  ptr += cur.regm.rm_eo;
9340  j += cur.regm.rm_eo;
9341 #ifdef DEBUG
9342  printf("Found match (%d bytes) @ offset %d (%d tot)\n",
9343  cur.regm.rm_eo - cur.regm.rm_so, cur.regm.rm_so, j);
9344 #endif /* DEBUG */
9345  }
9346 #ifdef DEBUG
9347  printf("Total # of matches == %d\n", i);
9348 #endif /* DEBUG */
9349  if (i && j) {
9350  len = j;
9351 #ifdef DEBUG
9352  printf("WINDOW-adjst: offset %d, len %d\n", off, len);
9353 #endif /* DEBUG */
9354  } else {
9355  Assert(NO, "Regex \"%s\" (foot-end) not in raw text", cp);
9356  }
9357  /*
9358  * Then, find the first occurrence (in the raw file) of the first word
9359  * in the license-footprint; the exception here is that if the "last word"
9360  * turned out to be the entire regex, then the "first word" will be, too.
9361  */
9362  if (cp != start) {
9363  cp = _REGEX(index);
9364  j = 1;
9365 #ifdef DEBUG
9366  printf("BO-Regex, cp == '%c'\n", *cp);
9367 #endif /* DEBUG */
9368  while (*cp == ' ') {
9369  cp++;
9370  }
9371  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
9372  (*cp != '{')) {
9373  if (*cp == '[') {
9374  if (*(cp + 1) == '^') {
9375  j = 0;
9376  }
9377  while (*cp && (*cp != ']')) {
9378  cp++;
9379  }
9380  if (*(cp+1) && (*(cp+1) == '?')) {
9381  cp++;
9382  }
9383  if (j) {
9384  cp++;
9385  break;
9386  }
9387  }
9388  cp++;
9389  }
9390  if (*cp == '(') {
9391  /*printf("Start@%d '%c'\n", cp-_REGEX(index), *cp);*/
9392  for (n = 1, cp++; n; cp++) {
9393  /*printf("... '%c'\n", *cp);*/
9394  if ((*cp == '(') && (*(cp-1) != '\\')) {
9395  n++;
9396  } else if ((*cp == ')') && (*(cp-1) != '\\')) {
9397  n--;
9398  }
9399  }
9400  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
9401  (*cp != '[')) {
9402  cp++;
9403  }
9404  /*printf("_END_@%d '%c'\n", cp-_REGEX(index), *cp);*/
9405  }
9406  if ((*cp == '?') ||
9407  (*cp == '+') ||
9408  ((*cp == '.') && (*(cp-1) == '\\'))) {
9409  cp++;
9410  }
9411  if (*cp) {
9412  save = *cp;
9413  *cp = NULL_CHAR;
9414 #ifdef DEBUG
9415  printf("SEARCH @head is now \"%s\"\n", _REGEX(index));
9416 #endif /* DEBUG */
9417  ptr = sp->buf+sso;
9418  if (strGrep(_REGEX(index), ptr,
9419  REG_ICASE|REG_EXTENDED)) {
9420  len -= cur.regm.rm_so;
9421  off += cur.regm.rm_so;
9422  } else {
9423  LOG_NOTICE("Regex \"%s\" (foot-start) not in raw text", _REGEX(index));
9424  }
9425  *cp = save; /* restore to original text */
9426  }
9427 #ifdef DEBUG
9428  else {
9429  LOG_NOTICE("Nothing to trim from the front (*cp == NULL)");
9430  }
9431 #endif /* DEBUG */
9432  }
9433 #ifdef DEBUG
9434  else {
9435  printf("Hey, last-word IS the entire regex!\n");
9436  }
9437 #endif /* DEBUG */
9438  saveRegexLocation(index, off, len, YES);
9439 #ifdef DEBUG
9440  printf("WINDOW-FINAL: offset %d, len %d\n", off, len);
9441 #endif /* DEBUG */
9442  /*
9443  * At this point, the window is as small as we can (reasonably) make it,
9444  * given that we mundged the original file-text and didn't make a complete
9445  * map of every character. The variable off contains the start of the
9446  * window (the absolute offset within the raw file) and the variable len
9447  * contains the length of the text window.
9448  *****
9449  * DON'T FORGET that some license-footprints are determined merely by
9450  * searching for a string in the raw-text file (calling idxGrep()), e.g.,
9451  * not using the doctored buffers. See fileHasPatt() for details.
9452  *****
9453  * And finally, note how the list of entries matched (in 'whereList') is
9454  * manipulated -- see the very bottom of "addRef()".
9455  */
9456  if ((off + len) > size) {
9457  LOG_FATAL("off %d + len %d (== %d) exceeds filesize %d!", off, len, off + len, size);
9458  Bail(-__LINE__);
9459  }
9460  return;
9461 }
9462 
9470 void saveRegexLocation(int index, int offset, int length, int saveCache)
9471 {
9472  item_t *ip;
9473  item_t *sp;
9474 
9475 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9476  traceFunc("== saveRegexLocation(%d, %d, %d, %d)\n", index, offset, length,
9477  saveCache);
9478 #endif /* PROC_TRACE || PHRASE_DEBUG */
9479 
9480  (void) sprintf(name, "reg%04d", index);
9481  sp = listGetItem(&whereList, name);
9482  sp->bIndex = whereList.used;
9483  sp->bStart = offset;
9484  sp->bLen = length;
9485  if (saveCache) {
9486  ip = listGetItem(&whCacheList, name);
9487  ip->bIndex = index;
9488  ip->bStart = offset;
9489  ip->bLen = length;
9490  }
9491  return;
9492 }
9493 
9494 
9495 void saveUnclBufLocation(int bufNum)
9496 {
9497  item_t *p;
9498  item_t *bp;
9499  list_t *lp;
9500 
9501 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9502  traceFunc("== saveUnclBufLocation(%d, %d, %d, %d)\n", bufNum);
9503 #endif /* PROC_TRACE || PHRASE_DEBUG */
9504 
9505  listClear(&whereList, NO); /* empty all prior matches */
9506  p = listGetItem(&cur.offList, _REGEX(_LEGAL_first));
9507  lp = (list_t *) p->bList;
9508  (void) sprintf(name, "buf%05d", bufNum);
9509  p = listGetItem(lp, name);
9510  bp = listGetItem(&whereList, LS_UNCL);
9511  bp->bStart = p->bStart;
9512  bp->bLen = p->bLen;
9513  bp->bIndex = -1;
9514  return;
9515 }
9516 
9522 void addRef(char *str, int interest)
9523 {
9524  item_t *p;
9525  char *bp;
9526  char *sp = str;
9527  if(!(str && str[0]))
9528  return;
9529 
9530 #ifdef PROC_TRACE
9531  traceFunc("== addRef(\"%s\", %d)\n", str, interest);
9532 #endif /* PROC_TRACE */
9533 
9534 #if defined(DEBUG)
9535  listDump(&whereList, YES);
9536 #endif /* DEBUG */
9537  /*
9538  * Add this to the list of individual pieces found, and mark the license
9539  * to make generating a license-summary easier. The general strategy is
9540  * to COMPLETELY ignore anything NOT considered 'noteworthy'. So if the
9541  * license is noteworthy, we add one to the count, so that we can call
9542  * listCount() on the list to find if there's a 'real license' in here.
9543  * see makeLicenseSummary() in license.c for more details.
9544  *****
9545  * This little trick is also used in distroReport() and rawSourceReport(),
9546  * see report.c
9547  */
9548  if (str == NULL_STR) {
9549  Assert(YES, "license detected != NULL");
9550  }
9551  if (*str == NULL_CHAR) {
9552  Assert(YES, "license string not start with NULL");
9553  }
9554  bp = licStr+refOffset;
9555  *bp++ = ',';
9556  /*
9557  CDB - Opportunity for optimization via memcpy
9558  */
9559  while (*sp) {
9560  *bp++ = *sp++;
9561  }
9562  *bp = NULL_CHAR;
9563  refOffset = bp - licStr;
9564  /*
9565  * Stuff this license in to several lists:
9566  * - parseList is used to create a package "computed license summary"
9567  * - briefList is used to compute a "terse/brief" license summary
9568  */
9569  p = listGetItem(&cur.parseList, str);
9570  if (interest) {
9571  p->iFlag++;
9572  if (interest > IL_LOW) {
9573  p->iLevel = interest;
9574  }
9575  }
9576  if (interest > maxInterest) {
9577  maxInterest = interest;
9578  }
9579  if (lDiags && whereList.used) {
9580  int i = 0;
9581  listSort(&whereList, SORT_BY_COUNT_ASC);
9582  printf("WINDOW for \"%s\": ", str);
9583  while ((p = listIterate(&whereList))) {
9584  if (i++ > 0) {
9585  printf(", ");
9586  }
9587  printf("%d+%d", p->bStart, p->bLen);
9588  }
9589  printf("\n");
9590  }
9591  listClear(&whereList, NO);
9592 #ifdef DEBUG
9593  if (lDiags) {
9594  printf("++ \"%s\" [int=%d]\n", str, interest);
9595  }
9596 #endif /* DEBUG */
9597 
9598  addLicence(cur.theMatches,str);
9599 
9600  return;
9601 }
9602 
9608 int famOPENLDAP(char *filetext, int size, int isML, int isPS)
9609 {
9610  int ret = 0;
9611 
9612  if (lmem[_tOPENLDAP]) {
9613  if (INFILE(_TITLE_OPENLDAP25)) {
9614  INTERESTING("OLDAP-2.5");
9615  ret = 1;
9616  }
9617  else if (INFILE(_TITLE_OPENLDAP26)) {
9618  INTERESTING("OLDAP-2.6");
9619  ret = 1;
9620  }
9621  else if (INFILE(_TITLE_OPENLDAP27)) {
9622  INTERESTING("OLDAP-2.7");
9623  ret = 1;
9624  }
9625  else if (INFILE(_TITLE_OPENLDAP28)) {
9626  INTERESTING("OLDAP-2.8");
9627  ret = 1;
9628  }
9629  else if (INFILE(_TITLE_OPENLDAP201)) {
9630  INTERESTING("OLDAP-2.0.1");
9631  ret = 1;
9632  }
9633  else if (INFILE(_TITLE_OPENLDAP20)) {
9634  INTERESTING("OLDAP-2.0");
9635  ret = 1;
9636  }
9637  else if (INFILE(_TITLE_OPENLDAP21)) {
9638  INTERESTING("OLDAP-2.1");
9639  ret = 1;
9640  }
9641  else if (INFILE(_TITLE_OPENLDAP221) || INFILE(_SPDX_OLDAP_221)) {
9642  INTERESTING("OLDAP-2.2.1");
9643  ret = 1;
9644  }
9645  else if (INFILE(_TITLE_OPENLDAP222) || INFILE(_SPDX_OLDAP_222)) {
9646  INTERESTING("OLDAP-2.2.2");
9647  ret = 1;
9648  }
9649  else if (INFILE(_TITLE_OPENLDAP22)) {
9650  INTERESTING("OLDAP-2.2");
9651  ret = 1;
9652  }
9653  else if (INFILE(_TITLE_OPENLDAP11)) {
9654  INTERESTING("OLDAP-1.1");
9655  ret = 1;
9656  }
9657  else if (INFILE(_TITLE_OPENLDAP23)) {
9658  INTERESTING("OLDAP-2.3");
9659  ret = 1;
9660  }
9661  else if (INFILE(_TITLE_OPENLDAP24)) {
9662  INTERESTING("OLDAP-2.4");
9663  ret = 1;
9664  }
9665  else if (INFILE(_TITLE_OPENLDAP12)) {
9666  INTERESTING("OLDAP-1.2");
9667  ret = 1;
9668  }
9669  else if (INFILE(_TITLE_OPENLDAP13)) {
9670  INTERESTING("OLDAP-1.3");
9671  ret = 1;
9672  }
9673  else if (INFILE(_TITLE_OPENLDAP14)) {
9674  INTERESTING("OLDAP-1.4");
9675  ret = 1;
9676  }
9677  else if (INFILE(_CR_OPENLDAP) && INFILE(_TITLE_OPENLDAP)) {
9678  INTERESTING("OLDAP");
9679  ret = 1;
9680  }
9681  }
9682  lmem[_fOPENLDAP] = ret;
9683  return(ret);
9684 }
9685 
9686 
9710 int checkUnclassified(char *filetext, int size, int score,
9711  int isML, int isPS, int nw)
9712 {
9713  char *buf;
9714  char *curptr;
9715  char *cp;
9716  int m = 0;
9717 #ifdef UNKNOWN_CHECK_DEBUG
9718  int pNum = 0;
9719 #endif /* UNKNOWN_CHECK_DEBUG */
9720  int i = 0;
9721 
9722 #ifdef PROC_TRACE
9723  traceFunc("== checkUnclassified(%p, %d, %d, %d, %d, %d)\n", filetext,
9724  size, score, isML, isPS, nw);
9725 #endif /* PROC_TRACE */
9726 
9727  /*
9728  * Based on experience, this is a good place to look for false-positives:
9729  *****
9730  * Occasionally IETF documents (RFCs, technical descriptions and the like)
9731  * have enough text to trip the unclassified-license detector falsely.
9732  * As a first quick check, see if there's an IETF copyright in the file
9733  * and if so, avoid this (somewhat expensive) check.
9734  *****
9735  * The "Debian social contract" has some very legal-looking verbage, too.
9736  */
9737  if (mCR_IETF()) {
9738  return(0);
9739  }
9740  if (INFILE(_LT_DEB_CONTRACT) || INFILE(_LT_DEB_CONTRACTref)){
9741  INTERESTING("Debian-social-DFSG");
9742  return(0);
9743  }
9744  if (INFILE(_LT_TROLLTECH)) {
9745  return(1);
9746  }
9747 
9748  /*
9749  * A Generic EULA 'qualifies' as an UnclassifiedLicense, or the clause 'License agreement' as an UnclassifiedLicense, check this
9750  * one before trying the word-matching magic checks (below).
9751  */
9752  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
9753  m = INFILE(_LT_GEN_EULA) || INFILE(_LT_LG) || INFILE(_LT_GENERIC_UNCLASSIFIED);
9754  /* gl.flags & ~FL_SAVEBASE; CDB -- This makes no sense, given line above */
9755  if (m) {
9756  if (cur.licPara == NULL_STR && cur.matchBase) {
9757  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
9758  }
9759  return(1);
9760  }
9761  checknw = nw;
9762  /*
9763  * Look for paragraphs of text that could be licenses. We'll check the
9764  * resulting text for 4 types of different words (all in proximity leads
9765  * us to believe it's a license of some sort). If we don't get a paragraph
9766  * to search based on the first set of words, look no further.
9767  */
9768 #ifdef UNKNOWN_CHECK_DEBUG
9769  printf("... first regex: \"%s\"\n", _REGEX(_LEGAL_first));
9770 #endif /* UNKNOWN_CHECK_DEBUG */
9771  if ((buf = getInstances(filetext, size, gl.uPsize, gl.uPsize,
9772  _REGEX(_LEGAL_first), YES)) == NULL_STR) {
9773 #ifdef UNKNOWN_CHECK_DEBUG
9774  printf("... getInstances returns NULL\n");
9775 #endif /* UNKNOWN_CHECK_DEBUG */
9776  return(0);
9777  }
9778  if (lDiags) {
9779  printRegexMatch(_LEGAL_first, NO);
9780  }
9781  /*
9782  * Without examining each paragraph, make sure the file contains the
9783  * components we're looking for... if not, don't check any further.
9784  */
9785  if (/*size > 102400 && */
9786  !match3(_LEGAL_first, buf, score, NO, isML, isPS)) {
9787 #ifdef UNKNOWN_CHECK_DEBUG
9788  printf("... first check fails\n");
9789 #endif /* UNKNOWN_CHECK_DEBUG */
9790  return(0);
9791  }
9792  /*
9793  * buf now points to a series of paragraphs that have 6 lines above
9794  * AND below the regex we've matched, PLUS a separator line between
9795  * each paragraph. The LAST paragraph doesn't have a separator-line.
9796  *****
9797  * For the sake of the search, make the separator line 'disappear'.
9798  */
9799  curptr = buf;
9800  while (idxGrep(_UTIL_XYZZY, curptr, 0)) {
9801  cp = curptr + cur.regm.rm_so;
9802  *cp = NULL_CHAR;
9803 #ifdef UNKNOWN_CHECK_DEBUG
9804  printf("DEBUG: paragraph #%d:\n[START-PARA]\n%s\n[END-PARA]\n",
9805  ++pNum, curptr);
9806 #endif /* UNKNOWN_CHECK_DEBUG */
9807  i++;
9808  /*
9809  * Now that we have our 'paragraph span', check the contents of the
9810  * paragraph for the other 3 groups of words. A match in EACH group
9811  * (plus other criteria checked, of course) means we've likely found
9812  * as-of-yet unclassified license.
9813  *****
9814  * A generic "no warranty" paragraph also looks like a license, so in
9815  * that case don't return a false positive.
9816  */
9817  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
9818  saveUnclBufLocation(i);
9819  return(1);
9820  }
9821 #ifdef UNKNOWN_CHECK_DEBUG
9822  else {
9823  printf("DEBUG: match() returns 0, look again\n");
9824  }
9825 #endif /* UNKNOWN_CHECK_DEBUG */
9826  /*
9827  * NO-match means this paragraph doesn't contain the magic words we
9828  * seek. However, this file still _may_ contain the magic paragraph --
9829  * it'll be searched in this while-loop until either the magic OR
9830  * end-of-file is found)...
9831  */
9832  *cp++ = '='; /* reset line */
9833  if ((cp = findEol(cp)) == NULL_STR) {
9834  LOG_FATAL("Cannot find delimeter!")
9835  Bail(-__LINE__);
9836  }
9837  curptr = cp+1;
9838  }
9839  /*
9840  * One last buffer to try...
9841  */
9842 #ifdef UNKNOWN_CHECK_DEBUG
9843  printf("DEBUG: %s paragraph (#%d):\n[START-PARA]\n%s\n[END-PARA]\n",
9844  pNum == 0 ? "ONLY" : "LAST", ++pNum, curptr);
9845 #endif /* UNKNOWN_CHECK_DEBUG */
9846  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
9847  saveUnclBufLocation(++i);
9848  return(1);
9849  }
9850  return(0);
9851 }
9852 
9853 
9857 void checkFileReferences(char *filetext, int size, int score, int kwbm,
9858  int isML, int isPS)
9859 {
9860  int i;
9861 
9862 #ifdef PROC_TRACE
9863  traceFunc("== checkFileReferences(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
9864  size, score, kwbm, isML, isPS);
9865 #endif /* PROC_TRACE */
9866  for (i = 0; i < NSEECOPYING; i++) {
9867  if (INFILE(_SEECOPYING_first+i)) {
9868  if (lDebug) {
9869  (void) sprintf(name, "Gen-CPY-%d", ++i);
9870  INTERESTING(name);
9871  } else {
9872  INTERESTING("See-file.COPYING");
9873  }
9874  return;
9875  }
9876  }
9877  /* */
9878  for (i = 0; i < NSEELICENSE; i++) {
9879  if (INFILE(_SEELICENSE_first+i)) {
9880  if (lDebug) {
9881  (void) sprintf(name, "Gen-CPY-%d", ++i);
9882  INTERESTING(name);
9883  } else {
9884  INTERESTING("See-file.LICENSE");
9885  }
9886  return;
9887  }
9888  }
9889  /* */
9890  for (i = 0; i < NSEEREADME; i++) {
9891  if (INFILE(_SEEREADME_first+i)) {
9892  if (lDebug) {
9893  (void) sprintf(name, "Gen-CPY-%d", ++i);
9894  INTERESTING(name);
9895  } else {
9896  INTERESTING("See-file.README");
9897  }
9898  return;
9899  }
9900  }
9901  /* */
9902  for (i = 0; i < NSEEOTHER; i++) {
9903  if (INFILE(_SEEOTHER_first+i)) {
9904  if (lDebug) {
9905  (void) sprintf(name, "Gen-CPY-%d", ++i);
9906  INTERESTING(name);
9907  } else {
9908  INTERESTING("See-doc.OTHER");
9909  }
9910  return;
9911  }
9912  }
9913  /* */
9914  if (INFILE(_LT_SEE_OUTPUT_1)) {
9915  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.EXECUTE");
9916  }
9917 #if 0
9918  else if (INFILE(_LT_SEE_OUTPUT_2)) {
9919  INTERESTING(lDebug ? "Gen-EXC-2" : "Free-SW.run-COMMAND");
9920  } else if (INFILE(_LT_SEE_OUTPUT_3)) {
9921  INTERESTING(lDebug ? "Gen-EXC-3" : "Free-SW.run-COMMAND");
9922  }
9923 #endif
9924  if(HASTEXT(_LT_SEE_COPYING_LICENSE_1, REG_EXTENDED) || HASTEXT(_LT_SEE_COPYING_LICENSE_2, REG_EXTENDED)) {
9925  INTERESTING("See-file");
9926  }
9927  else if (HASTEXT(_LT_SEE_URL, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref1, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref2, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref3, REG_EXTENDED)) {
9928  INTERESTING("See-URL");
9929  }
9930  return;
9931 
9932 #ifdef OLD_VERSION
9933  if (INFILE(_LT_SEE_COPYING_1)) {
9934  INTERESTING(lDebug ? "Gen-CPY-1" : "See-file.COPYING");
9935  }
9936  else if (INFILE(_LT_SEE_COPYING_2)) {
9937  INTERESTING(lDebug ? "Gen-CPY-2" : "See-file.COPYING");
9938  }
9939  else if (INFILE(_LT_SEE_COPYING_3)) {
9940  INTERESTING(lDebug ? "Gen-CPY-3" : "See-file.COPYING");
9941  }
9942  else if (INFILE(_LT_SEE_COPYING_4)) {
9943  INTERESTING(lDebug ? "Gen-CPY-4" : "See-file.COPYING");
9944  }
9945  else if (INFILE(_LT_SEE_COPYING_5)) {
9946  INTERESTING(lDebug ? "Gen-CPY-5" : "See-file.COPYING");
9947  }
9948  else if (INFILE(_LT_SEE_COPYING_6)) {
9949  INTERESTING(lDebug ? "Gen-CPY-6" : "See-file.COPYING");
9950  }
9951  else if (INFILE(_LT_SEE_COPYING_7)) {
9952  INTERESTING(lDebug ? "Gen-CPY-7" : "See-file.COPYING");
9953  }
9954  else if (INFILE(_LT_SEE_COPYING_8)) {
9955  INTERESTING(lDebug ? "Gen-CPY-8" : "See-file.COPYING");
9956  }
9957  else if (INFILE(_LT_SEE_COPYING_9)) {
9958  INTERESTING(lDebug ? "Gen-CPY-9" : "See-file.COPYING");
9959  }
9960  else if (INFILE(_LT_SEE_COPYING_10)) {
9961  INTERESTING(lDebug ? "Gen-CPY-10" : "See-file.COPYING");
9962  }
9963  else if (INFILE(_LT_SEE_COPYING_LAST1)) {
9964  INTERESTING(lDebug ? "Gen-CPY-L1" : "See-file.COPYING");
9965  }
9966  else if (INFILE(_LT_SEE_COPYING_LAST2)) {
9967  INTERESTING(lDebug ? "Gen-CPY-L2" : "See-file.COPYING");
9968  }
9969  else if (INFILE(_LT_SEE_LICENSE_1)) {
9970  INTERESTING(lDebug ? "Gen-LIC-1" : "See-file.LICENSE");
9971  }
9972  else if (INFILE(_LT_SEE_LICENSE_2)) {
9973  INTERESTING(lDebug ? "Gen-LIC-2" : "See-file.LICENSE");
9974  }
9975  else if (INFILE(_LT_SEE_LICENSE_3)) {
9976  INTERESTING(lDebug ? "Gen-LIC-3" : "See-file.LICENSE");
9977  }
9978  else if (INFILE(_LT_SEE_LICENSE_4)) {
9979  INTERESTING(lDebug ? "Gen-LIC-4" : "See-file.LICENSE");
9980  }
9981  else if (INFILE(_LT_SEE_LICENSE_5)) {
9982  INTERESTING(lDebug ? "Gen-LIC-5" : "See-file.LICENSE");
9983  }
9984  else if (INFILE(_LT_SEE_LICENSE_6)) {
9985  INTERESTING(lDebug ? "Gen-LIC-6" : "See-file.LICENSE");
9986  }
9987  else if (INFILE(_LT_SEE_LICENSE_7)) {
9988  INTERESTING(lDebug ? "Gen-LIC-7" : "See-file.LICENSE");
9989  }
9990  else if (INFILE(_LT_SEE_LICENSE_8)) {
9991  INTERESTING(lDebug ? "Gen-LIC-8" : "See-file.LICENSE");
9992  }
9993  else if (INFILE(_LT_SEE_LICENSE_9)) {
9994  INTERESTING(lDebug ? "Gen-LIC-9" : "See-file.LICENSE");
9995  }
9996  else if (INFILE(_LT_SEE_LICENSE_10)) {
9997  INTERESTING(lDebug ? "Gen-LIC-10" : "See-file.LICENSE");
9998  }
9999  else if (INFILE(_LT_SEE_LICENSE_LAST1)) {
10000  INTERESTING(lDebug ? "Gen-LIC-L1" : "See-file.LICENSE");
10001  }
10002  else if (INFILE(_LT_SEE_LICENSE_LAST2)) {
10003  INTERESTING(lDebug ? "Gen-LIC-L2" : "See-file.LICENSE");
10004  }
10005  else if (INFILE(_LT_SEE_README_1)) {
10006  INTERESTING(lDebug ? "Gen-RDM-1" : "See-file.README");
10007  }
10008  else if (INFILE(_LT_SEE_README_2)) {
10009  INTERESTING(lDebug ? "Gen-RDM-2" : "See-file.README");
10010  }
10011  else if (INFILE(_LT_SEE_README_3)) {
10012  INTERESTING(lDebug ? "Gen-RDM-3" : "See-file.README");
10013  }
10014  else if (INFILE(_LT_SEE_README_4)) {
10015  INTERESTING(lDebug ? "Gen-RDM-4" : "See-file.README");
10016  }
10017  else if (INFILE(_LT_SEE_README_5)) {
10018  INTERESTING(lDebug ? "Gen-RDM-5" : "See-file.README");
10019  }
10020  else if (INFILE(_LT_SEE_README_6)) {
10021  INTERESTING(lDebug ? "Gen-RDM-6" : "See-file.README");
10022  }
10023  else if (INFILE(_LT_SEE_README_7)) {
10024  INTERESTING(lDebug ? "Gen-RDM-7" : "See-file.README");
10025  }
10026  else if (INFILE(_LT_SEE_README_LAST1)) {
10027  INTERESTING(lDebug ? "Gen-RDM-L1" : "See-file.README");
10028  }
10029  else if (INFILE(_LT_SEE_README_LAST2)) {
10030  INTERESTING(lDebug ? "Gen-RDM-L2" : "See-file.README");
10031  }
10032  else if (INFILE(_LT_SEE_OTHER_1)) {
10033  INTERESTING(lDebug ? "Gen-OTH-1" : "See-doc.OTHER");
10034  }
10035  else if (INFILE(_LT_SEE_OTHER_2)) {
10036  INTERESTING(lDebug ? "Gen-OTH-2" : "See-doc.OTHER");
10037  }
10038  else if (INFILE(_LT_SEE_OTHER_3)) {
10039  INTERESTING(lDebug ? "Gen-OTH-3" : "See-doc.OTHER");
10040  }
10041  else if (INFILE(_LT_SEE_OTHER_4)) {
10042  INTERESTING(lDebug ? "Gen-OTH-4" : "See-doc.OTHER");
10043  }
10044  else if (INFILE(_LT_SEE_OTHER_5)) {
10045  INTERESTING(lDebug ? "Gen-OTH-5" : "See-doc.OTHER");
10046  }
10047  else if (INFILE(_LT_SEE_OTHER_6)) {
10048  INTERESTING(lDebug ? "Gen-OTH-6" : "See-doc.OTHER");
10049  }
10050  else if (INFILE(_LT_SEE_OTHER_7)) {
10051  INTERESTING(lDebug ? "Gen-OTH-7" : "See-doc.OTHER");
10052  }
10053  else if (INFILE(_LT_SEE_OTHER_8)) {
10054  INTERESTING(lDebug ? "Gen-OTH-8" : "See-doc.OTHER");
10055  }
10056  else if (INFILE(_LT_SEE_OTHER_9)) {
10057  INTERESTING(lDebug ? "Gen-OTH-9" : "See-doc.OTHER");
10058  }
10059  else if (INFILE(_LT_SEE_OTHER_10)) {
10060  INTERESTING(lDebug ? "Gen-OTH-10" : "See-doc.OTHER");
10061  }
10062  else if (INFILE(_LT_SEE_OTHER_11)) {
10063  INTERESTING(lDebug ? "Gen-OTH-11" : "See-doc.OTHER");
10064  }
10065  else if (INFILE(_LT_SEE_OTHER_12)) {
10066  INTERESTING(lDebug ? "Gen-OTH-12" : "See-doc.OTHER");
10067  }
10068  else if (INFILE(_LT_SEE_OTHER_13)) {
10069  INTERESTING(lDebug ? "Gen-OTH-13" : "See-doc.OTHER");
10070  }
10071  else if (INFILE(_LT_SEE_OTHER_14)) {
10072  INTERESTING(lDebug ? "Gen-OTH-14" : "See-doc.OTHER");
10073  }
10074  else if (INFILE(_LT_SEE_OTHER_15)) {
10075  INTERESTING(lDebug ? "Gen-OTH-15" : "See-doc.OTHER");
10076  }
10077  else if (INFILE(_LT_SEE_OTHER_LAST1)) {
10078  INTERESTING(lDebug ? "Gen-OTH-L1" : "See-doc.OTHER");
10079  }
10080  else if (INFILE(_LT_SEE_OTHER_LAST2)) {
10081  INTERESTING(lDebug ? "Gen-OTH-L2" : "See-doc.OTHER");
10082  }
10083  else if (INFILE(_LT_SEE_OTHER_LAST3)) {
10084  INTERESTING(lDebug ? "Gen-OTH-L3" : "See-doc.OTHER");
10085  }
10086  else if (INFILE(_LT_SEE_OUTPUT_1)) {
10087  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.interactive");
10088  }
10089  return;
10090 #endif /* OLD_VERSION */
10091 }
10092 
10093 
10094 int checkPublicDomain(char *filetext, int size, int score, int kwbm,
10095  int isML, int isPS)
10096 {
10097  int ret;
10098 
10099 #ifdef PROC_TRACE
10100  traceFunc("== checkPublicDomain(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
10101  size, score, kwbm, isML, isPS);
10102 #endif /* PROC_TRACE */
10103 
10104  if (pd >= 0) { /* already tried? */
10105  return(pd);
10106  }
10107  ret = 0; /* default answer is "no" */
10108  if (INFILE(_LT_PUBDOM_CC)) {
10109  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
10110  ret = 1;
10111  } else if (INFILE(_LT_PUBDOM_ODC)) {
10112  INTERESTING(lDebug ? "Pubdom(ODC)" : LS_PD_CLM);
10113  ret = 1;
10114  } else if (INFILE(_LT_PUBDOM_PDD)) {
10115  INTERESTING(lDebug ? "Pubdom(PDD)" : LS_PD_CLM);
10116  ret = 1;
10117  } else if (INFILE(_LT_PUBDOM_USE)) {
10118  INTERESTING(lDebug ? "Pubdom(use)" : LS_PD_CLM);
10119  ret = 1;
10120  } else if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
10121  INTERESTING(LS_NOT_PD);
10122  ret = 1;
10123  } else if (INFILE(_CR_PUBDOM)) {
10124  if (INFILE(_LT_PUBDOMNOTcpyrt)) {
10125  INTERESTING(LS_PD_CLM);
10126  } else {
10127  INTERESTING(LS_PD_CPRT);
10128  }
10129  ret = 1;
10130  } else if (INFILE(_CR_NONE)) {
10131  INTERESTING(lDebug ? "Pubdom(no-CR)" : LS_PD_CLM);
10132  ret = 1;
10133  } else if (INFILE(_LT_UNLIN) || URL_INFILE(_URL_UNLINref) || URL_INFILE(_URL_UNLIN)) {
10134  INTERESTING("Unlicense");
10135  ret = 1;
10136  } else if (INFILE(_LT_PUBDOM_1)) {
10137  INTERESTING(lDebug ? "Pubdom(1)" : LS_PD_CLM);
10138  ret = 1;
10139  } else if (INFILE(_LT_PUBDOM_2) && NOT_INFILE(_PHR_PUBLIC_FUNCT) && NOT_INFILE(_LT_NOTPUBDOM_1)) {
10140  INTERESTING(lDebug ? "Pubdom(2)" : LS_PD_CLM);
10141  ret = 1;
10142  } else if (INFILE(_LT_PUBDOM_3)) {
10143  INTERESTING(lDebug ? "Pubdom(3)" : LS_PD_CLM);
10144  ret = 1;
10145 #ifdef REMOVED_AS_TOO_BROAD
10146  } else if (INFILE(_LT_PUBDOM_4)) {
10147  INTERESTING(lDebug ? "Pubdom(4)" : LS_PD_CLM);
10148  ret = 1;
10149  } else if (INFILE(_LT_PUBDOM_5)) {
10150  INTERESTING(lDebug ? "Pubdom(5)" : LS_PD_CLM);
10151  ret = 1;
10152  } else if (INFILE(_LT_PUBDOM_6)) {
10153  INTERESTING(lDebug ? "No-more-copyright" : LS_PD_CLM);
10154  ret = 1;
10155 #endif // done removing too broad signatures
10156  } else if (INFILE(_LT_PUBDOM_7)) {
10157  INTERESTING(lDebug ? "Pubdom(7)" : LS_PD_CLM);
10158  ret = 1;
10159  } else if (INFILE(_LT_PUBDOM_8)) {
10160  INTERESTING(lDebug ? "Pubdom(8)" : LS_PD_CLM);
10161  ret = 1;
10162  } else if (INFILE(_LT_PUBDOM_9)) {
10163  INTERESTING(lDebug ? "Pubdom(9)" : LS_PD_CLM);
10164  ret = 1;
10165  } else if (INFILE(_LT_PUBDOM_10)) {
10166  if (INFILE(_LT_blessing)) {
10167  INTERESTING(lDebug ? "Pubdom(10)" : "blessing");
10168  }
10169  else {
10170  INTERESTING(lDebug ? "Pubdom(10)" : LS_PD_CLM);
10171  }
10172  ret = 1;
10173  } else if (INFILE(_URL_PUBDOM)) {
10174  INTERESTING(lDebug ? "Pubdom(URL)" : LS_PD_CLM);
10175  ret = 1;
10176  } else if (HASKW(kwbm, _KW_public_domain) && score <= 3) {
10177  INTERESTING(LS_PD_ONLY);
10178  ret = 1;
10179  }
10180  return(ret);
10181 }
10182 
10183 
10191 void checkCornerCases(char *filetext, int size, int score,
10192  int kwbm, int isML, int isPS, int nw, int force)
10193 {
10194 
10195 #ifdef PROC_TRACE
10196  traceFunc("== checkCornerCases(%p, %d, %d, %d, %d, %d, %d, %d)\n",
10197  filetext, size, score, kwbm, isML, isPS, nw, force);
10198 #endif /* PROC_TRACE */
10199 
10200  if (crCheck++) { /* only need to check this once */
10201  return;
10202  }
10203  if (INFILE(_LT_NOTATT_NOTBSD)) {
10204  LOWINTEREST("non-ATT-BSD");
10205  }
10206 
10207  /*
10208  * FINAL cases: (close to giving up) -- lowest-importance items
10209  */
10216  /*
10217  if (!(*licStr)) {
10218  if (HASTEXT(_TEXT_TRADEMARK, 0)) {
10219  LOWINTEREST(LS_TDMKONLY);
10220  }
10221  }
10222  */
10223  if (!(*licStr)) {
10224  /*
10225  * We may have matched something but ultimately determined there's nothing
10226  * significant or of any interest, so empty the list of any matches we may
10227  * have observed to this point.
10228  */
10229  listClear(&whereList, NO); /* force 'nothing to report' */
10230  }
10231  return;
10232 }
10233 
10234 int match3(int base, char *buf, int score, int save, int isML, int isPS)
10235 {
10236  int i;
10237  int j;
10238  char *cp;
10239  /* */
10240 #ifdef PROC_TRACE
10241 #ifdef PROC_TRACE_SWITCH
10242  if (gl.ptswitch)
10243 #endif /* PROC_TRACE_SWITCH */
10244  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
10245  isML, isPS);
10246 #else /* not PROC_TRACE */
10247 #ifdef UNKNOWN_CHECK_DEBUG
10248  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
10249  isML, isPS);
10250 #endif /* UNKNOWN_CHECK_DEBUG */
10251 #endif /* not PROC_TRACE */
10252  /* */
10253  for (i = 1; i <= 3; i++) {
10254  if (dbgIdxGrep(base+i, buf, (save && lDiags)) == 0) {
10255 #ifdef UNKNOWN_CHECK_DEBUG
10256  printf("match3: FAILED regex (%d)!\n", base+i);
10257 #endif /* UNKNOWN_CHECK_DEBUG */
10258  return(0);
10259  }
10260  }
10261 #ifdef UNKNOWN_CHECK_DEBUG
10262  printf("match3: Success (%s)!\n",
10263  (save ? "buffer-for-real" : "file-initial-check"));
10264 #endif /* UNKNOWN_CHECK_DEBUG */
10265  /*
10266  * Some "possible licenses" are technical descriptions that share some words
10267  * that typically appear in licenses (distribution, terms, permission(s)).
10268  *****
10269  * If we're checking a paragraph (e.g., "save" is non-zero), see if there are
10270  * other engineering-development-technical terms in the paragraph that tend
10271  * to NOT be present in licenses...
10272  */
10273  if (save) {
10274  for (j = i = 0, cp = buf; *cp; i++, cp++) {
10275  if (*cp & 0200) {
10276  j++;
10277  }
10278  }
10279 #ifdef UNKNOWN_CHECK_DEBUG
10280  printf("DEEBUG: %d bytes, %d 8-bit\n", i, j);
10281 #endif /* UNKNOWN_CHECK_DEBUG */
10282  if (j >= (i/2)) {
10283  if (lDiags) {
10284  printf("... no, >= 50 percent 8-bit characters\n");
10285  }
10286  return(0);
10287  }
10288  /*
10289  We need to allocate space for a doctored-up version of the candidate
10290  unknown-license paragraph, but it's ONLY used in this function. E.g.,
10291  make darn sure we free it up before exiting this function...
10292  */
10293  cp = copyString(buf, MTAG_TEXTPARA);
10294  doctorBuffer(cp, isML, isPS, NO);
10295  /*
10296  If we detected a no-warraty statement earlier, "checknw" is != 0.
10297  Look for a no-warrany statement in this candidate paragraph.
10298  If we find it, report failure for the paragraph and remember
10299  finding the no--warranty.
10300  */
10301  if (checknw && !idxGrep(checknw, cp, REG_ICASE|REG_EXTENDED)) {
10302  if (lDiags) {
10303  printf("... no, warranty regex %d\n", checknw);
10304  }
10305  checknw = 0;
10306  memFree(cp, MTAG_TEXTPARA);
10307  return(0);
10308  }
10309  /*
10310  False-positive-check: GNU/FSF template (often see in ".po"
10311  and ".c" files
10312 
10313  "This file is distributed under the same license as the
10314  package PACKAGE"
10315  */
10316  if (dbgIdxGrep(_LT_BOGUSTMPL, cp, lDiags)) {
10317  if (lDiags) {
10318  printf("... no, FSF-GNU template\n");
10319  }
10320  memFree(cp, MTAG_TEXTPARA);
10321  return(0);
10322  }
10323  /*
10324  * False-positive-check: GNU GPL preamble statements; these have been
10325  * "sprinkled" throughout files seen before, so check ALL of them.
10326  */
10327  if (dbgIdxGrep(_PHR_GNU_FREEDOM, cp, lDiags) ||
10328  dbgIdxGrep(_PHR_GNU_COPYING, cp, lDiags) ||
10329  dbgIdxGrep(_PHR_GNU_PROTECT, cp, lDiags)) {
10330  if (lDiags) {
10331  printf("... no, GNU-GPL preamble\n");
10332  }
10333  memFree(cp, MTAG_TEXTPARA);
10334  return(0);
10335  }
10336  if (lDiags) {
10337  printf("... candidate paragraph analysis:\n");
10338  }
10339  for (i = j = 0; i < NKEYWORDS; i++) {
10340  if (idxGrep_recordPositionDoctored(i + _KW_first, cp, REG_EXTENDED | REG_ICASE)) {
10341  if (lDiags) {
10342  printf("%s", j ? ", " : "KEYWORDS: ");
10343  printf("%s", _REGEX(i+_KW_first));
10344  }
10345  j++;
10346  }
10347  }
10348  if (lDiags) {
10349  if (j) {
10350  printf("\n");
10351  }
10352  printf("SCORES: para %d, file %d == %05.2f%% ", j,
10353  score, 100.0 * (float) j / (float) score);
10354  }
10355  /*
10356  Here, we guess that an UnclassifiedLicense exists in a paragraph
10357  when:
10358  + a paragraph has a keyword-score of at least 3 -OR-
10359  + ... a keyword-score of 2 *AND* is >= 50% of the file's
10360  total score
10361 
10362  It's likely we'll see a few false-positives with a
10363  keyword-score of 2 but there are cases where this works.
10364  We can filter out the 2-scores we see
10365  with the FILTER checks below...
10366  */
10367  if (j == 0) { /* no license-like keywords */
10368  if (lDiags) {
10369  printf("(ZERO legal keywords)\n");
10370  }
10371  memFree(cp, MTAG_TEXTPARA);
10372  return(0);
10373  }
10374  if (j >= 3 || (j == 2 && j*2 >= score)) {
10375  if (j >= 3 && lDiags) {
10376  printf("(LIKELY: para-score >= 2)\n");
10377  }
10378  else if (lDiags) {
10379  printf("(MAYBE: local percentage)\n");
10380  }
10381  }
10382  else {
10383  if (lDiags) {
10384  printf("(NOT LIKELY a license)\n");
10385 #if 0
10386 #endif
10387  printf("[FAILED]\n%s\n[/FAILED]\n", buf);
10388  }
10389  memFree(cp, MTAG_TEXTPARA);
10390  return(0);
10391  }
10392  /*
10393  Sure, there ARE paragraphs with these words that do NOT constitute a
10394  real license. Look for key words and phrases of them HERE. This list
10395  of filters will likely grow over time.
10396  */
10397  for (i = 0; i < NFILTER; i++) {
10398  if (dbgIdxGrep(_FILTER_first+i, buf, lDiags)) {
10399  if (lDiags) {
10400  printf("!! NO-LIC: filter %d\n", ++i);
10401  }
10402  memFree(cp, MTAG_TEXTPARA);
10403  return(0);
10404  }
10405  }
10406  if (cur.licPara == NULL_STR) {
10407  saveLicenseParagraph(buf, isML, isPS, YES);
10408  }
10409  memFree(cp, MTAG_TEXTPARA);
10410  }
10411 #ifdef UNKNOWN_CHECK_DEBUG
10412  else {
10413  printf("match3: Initial-check only (save == %d)\n", save);
10414  }
10415 #endif /* UNKNOWN_CHECK_DEBUG */
10416  return(1);
10417 }
10418 
10419 void saveLicenseParagraph(char *mtext, int isML, int isPS, int entireBuf)
10420 {
10421  char *cp;
10422  char *start;
10423  int index=0;
10424  int len;
10425  start = copyString(mtext, MTAG_TEXTPARA);
10426  if(!start)
10427  {
10428  LOG_FATAL("called saveLicenseParagraph without text")
10429  Bail(-__LINE__);
10430  }
10431 #ifdef PROC_TRACE
10432 #ifdef PROC_TRACE_SWITCH
10433  if (gl.ptswitch)
10434 #endif /* PROC_TRACE_SWITCH */
10435  printf("== saveLicenseParagraph(%p, %d, %d, %d)\n", mtext, isML, isPS, entireBuf);
10436 #endif /* PROC_TRACE */
10437  /* */
10438  if (entireBuf) {
10439  cur.licPara = copyString(mtext, MTAG_TEXTPARA);
10440  } else {
10441  if (cur.regm.rm_so < 50) {
10442  len = cur.regm.rm_eo + 80;
10443  } else {
10444  len = cur.regm.rm_eo + 130 - cur.regm.rm_so;
10445  index = cur.regm.rm_so - 50;
10446  }
10447  cur.licPara = memAlloc(len + 9, MTAG_TEXTPARA);
10448  (void) strcpy(cur.licPara, "... ");
10449  (void) strncpy(cur.licPara + 4, start + index, len);
10450  (void) strcpy(cur.licPara + len + 4, " ...");
10451  memFree(start, MTAG_TEXTPARA);
10452  }
10453 
10454  /*
10455  * Convert double-line-feed chars ("\r" and "\n" combos) to a single "\n"
10456  */
10457  for (cp = cur.licPara; *cp; cp++) {
10458  if ((*cp == '\n' || *cp == '\r') &&
10459  (*(cp+1) == '\r' || *(cp+1) == '\n')) {
10460  *cp = ' ';
10461  *(cp+1) = '\n';
10462  }
10463  }
10464  if (lDiags) {
10465  printf("[PERHAPS] (%p)\n%s\n[/PERHAPS]\n", cur.licPara, cur.licPara);
10466  }
10467  return;
10468 }
10469 
10478 void spdxReference(char *filetext, int size, int isML, int isPS)
10479 {
10480  if (INFILE(_SPDX_Glide)) {
10481  INTERESTING("Glide");
10482  }
10483  if (INFILE(_SPDX_Abstyles)) {
10484  INTERESTING("Abstyles");
10485  }
10486  if (INFILE(_SPDX_AFL_11)) {
10487  INTERESTING("AFL-1.1");
10488  }
10489  if (INFILE(_SPDX_AFL_12)) {
10490  INTERESTING("AFL-1.2");
10491  }
10492  if (INFILE(_SPDX_AFL_20)) {
10493  INTERESTING("AFL-2.0");
10494  }
10495  if (INFILE(_SPDX_AFL_21)) {
10496  INTERESTING("AFL-2.1");
10497  }
10498  if (INFILE(_SPDX_AFL_30)) {
10499  INTERESTING("AFL-3.0");
10500  }
10501  if (INFILE(_SPDX_AMPAS)) {
10502  INTERESTING("AMPAS");
10503  }
10504  if (INFILE(_SPDX_APL_10)) {
10505  INTERESTING("APL-1.0");
10506  }
10507  if (INFILE(_SPDX_Adobe_Glyph)) {
10508  INTERESTING("Adobe-Glyph");
10509  }
10510  if (INFILE(_SPDX_APAFML)) {
10511  INTERESTING("APAFML");
10512  }
10513  if (INFILE(_SPDX_Adobe_2006)) {
10514  INTERESTING("Adobe-2006");
10515  }
10516  if (INFILE(_SPDX_Afmparse)) {
10517  INTERESTING("Afmparse");
10518  }
10519  if (INFILE(_SPDX_Aladdin)) {
10520  INTERESTING("Aladdin");
10521  }
10522  if (INFILE(_SPDX_ADSL)) {
10523  INTERESTING("ADSL");
10524  }
10525  if (INFILE(_SPDX_AMDPLPA)) {
10526  INTERESTING("AMDPLPA");
10527  }
10528  if (INFILE(_SPDX_ANTLR_PD)) {
10529  INTERESTING("ANTLR-PD");
10530  }
10531  if (INFILE(_SPDX_AML)) {
10532  INTERESTING("AML");
10533  }
10534  if (INFILE(_SPDX_APSL_10)) {
10535  INTERESTING("APSL-1.0");
10536  }
10537  if (INFILE(_SPDX_APSL_11)) {
10538  INTERESTING("APSL-1.1");
10539  }
10540  if (INFILE(_SPDX_APSL_12)) {
10541  INTERESTING("APSL-1.2");
10542  }
10543  if (INFILE(_SPDX_APSL_20)) {
10544  INTERESTING("APSL-2.0");
10545  }
10546  if (INFILE(_SPDX_Artistic_10_Perl)) {
10547  INTERESTING("Artistic-1.0-Perl");
10548  }
10549  else if (INFILE(_SPDX_Artistic_10_cl8)) {
10550  INTERESTING("Artistic-1.0-cl8");
10551  }
10552  else if (INFILE(_SPDX_Artistic_10)) {
10553  INTERESTING("Artistic-1.0");
10554  }
10555  if (INFILE(_SPDX_Artistic_20)) {
10556  INTERESTING("Artistic-2.0");
10557  }
10558  if (INFILE(_SPDX_AAL)) {
10559  INTERESTING("AAL");
10560  }
10561  if (INFILE(_SPDX_Bahyph)) {
10562  INTERESTING("Bahyph");
10563  }
10564  if (INFILE(_SPDX_Barr)) {
10565  INTERESTING("Barr");
10566  }
10567  if (INFILE(_SPDX_Beerware)) {
10568  INTERESTING("Beerware");
10569  }
10570  if (INFILE(_SPDX_BitTorrent_10)) {
10571  INTERESTING("BitTorrent-1.0");
10572  }
10573  else if (INFILE(_SPDX_BitTorrent_11)) {
10574  INTERESTING("BitTorrent-1.1");
10575  }
10576  if (INFILE(_SPDX_blessing)) {
10577  INTERESTING("blessing");
10578  }
10579  if (INFILE(_SPDX_BlueOak_100)) {
10580  INTERESTING("BlueOak-1.0.0");
10581  }
10582  if (INFILE(_SPDX_BSL_10)) {
10583  INTERESTING("BSL-1.0");
10584  }
10585  if (INFILE(_SPDX_Borceux)) {
10586  INTERESTING("Borceux");
10587  }
10588  if (INFILE(_SPDX_0BSD)) {
10589  INTERESTING("0BSD");
10590  }
10591  if (INFILE(_SPDX_bzip2_105)) {
10592  INTERESTING("bzip2-1.0.5");
10593  }
10594  else if (INFILE(_SPDX_bzip2_106)) {
10595  INTERESTING("bzip2-1.0.6");
10596  }
10597  if (INFILE(_SPDX_Caldera)) {
10598  INTERESTING("Caldera");
10599  }
10600  if (INFILE(_SPDX_CC_PDDC)) {
10601  INTERESTING("CC-PDDC");
10602  }
10603  if (INFILE(_SPDX_CERN_OHL_P_20)) {
10604  INTERESTING("CERN-OHL-P-2.0");
10605  }
10606  else if (INFILE(_SPDX_CERN_OHL_S_20)) {
10607  INTERESTING("CERN-OHL-S-2.0");
10608  }
10609  else if (INFILE(_SPDX_CERN_OHL_W_20)) {
10610  INTERESTING("CERN-OHL-W-2.0");
10611  }
10612  else if (INFILE(_SPDX_CERN_OHL_12)) {
10613  INTERESTING("CERN-OHL-1.2");
10614  }
10615  else if (INFILE(_SPDX_CERN_OHL_11)) {
10616  INTERESTING("CERN-OHL-1.1");
10617  }
10618  if (INFILE(_SPDX_ClArtistic)) {
10619  INTERESTING("ClArtistic");
10620  }
10621  if (INFILE(_SPDX_CNRI_Jython)) {
10622  INTERESTING("CNRI-Jython");
10623  }
10624  if (INFILE(_SPDX_CPOL_102)) {
10625  INTERESTING("CPOL-1.02");
10626  }
10627  if (INFILE(_SPDX_CPAL_10)) {
10628  INTERESTING("CPAL-1.0");
10629  }
10630  if (INFILE(_SPDX_CPL_10)) {
10631  INTERESTING("CPL-1.0");
10632  }
10633  if (INFILE(_SPDX_CAL_10_Combined_Work_Exception)) {
10634  INTERESTING("CAL-1.0-Combined-Work-Exception");
10635  }
10636  else if (INFILE(_SPDX_CAL_10)) {
10637  INTERESTING("CAL-1.0");
10638  }
10639  if (INFILE(_SPDX_CATOSL_11)) {
10640  INTERESTING("CATOSL-1.1");
10641  }
10642  if (INFILE(_SPDX_Condor_11)) {
10643  INTERESTING("Condor-1.1");
10644  }
10645  if (INFILE(_SPDX_CC_BY_10)) {
10646  INTERESTING("CC-BY-1.0");
10647  }
10648  else if (INFILE(_SPDX_CC_BY_20)) {
10649  INTERESTING("CC-BY-2.0");
10650  }
10651  else if (INFILE(_SPDX_CC_BY_25)) {
10652  INTERESTING("CC-BY-2.5");
10653  }
10654  else if (INFILE(_SPDX_CC_BY_30_AT)) {
10655  INTERESTING("CC-BY-3.0-AT");
10656  }
10657  else if (INFILE(_SPDX_CC_BY_30)) {
10658  INTERESTING("CC-BY-3.0");
10659  }
10660  else if (INFILE(_SPDX_CC_BY_40)) {
10661  INTERESTING("CC-BY-4.0");
10662  }
10663  if (INFILE(_SPDX_CC_BY_ND_10)) {
10664  INTERESTING("CC-BY-ND-1.0");
10665  }
10666  else if (INFILE(_SPDX_CC_BY_ND_20)) {
10667  INTERESTING("CC-BY-ND-2.0");
10668  }
10669  else if (INFILE(_SPDX_CC_BY_ND_25)) {
10670  INTERESTING("CC-BY-ND-2.5");
10671  }
10672  else if (INFILE(_SPDX_CC_BY_ND_30)) {
10673  INTERESTING("CC-BY-ND-3.0");
10674  }
10675  else if (INFILE(_SPDX_CC_BY_ND_40)) {
10676  INTERESTING("CC-BY-ND-4.0");
10677  }
10678  if (INFILE(_SPDX_CC_BY_NC_10)) {
10679  INTERESTING("CC-BY-NC-1.0");
10680  }
10681  else if (INFILE(_SPDX_CC_BY_NC_20)) {
10682  INTERESTING("CC-BY-NC-2.0");
10683  }
10684  else if (INFILE(_SPDX_CC_BY_NC_25)) {
10685  INTERESTING("CC-BY-NC-2.5");
10686  }
10687  else if (INFILE(_SPDX_CC_BY_NC_30)) {
10688  INTERESTING("CC-BY-NC-3.0");
10689  }
10690  else if (INFILE(_SPDX_CC_BY_NC_40)) {
10691  INTERESTING("CC-BY-NC-4.0");
10692  }
10693  if (INFILE(_SPDX_CC_BY_NC_ND_10)) {
10694  INTERESTING("CC-BY-NC-ND-1.0");
10695  }
10696  else if (INFILE(_SPDX_CC_BY_NC_ND_20)) {
10697  INTERESTING("CC-BY-NC-ND-2.0");
10698  }
10699  else if (INFILE(_SPDX_CC_BY_NC_ND_25)) {
10700  INTERESTING("CC-BY-NC-ND-2.5");
10701  }
10702  else if (INFILE(_SPDX_CC_BY_NC_ND_30_IGO)) {
10703  INTERESTING("CC-BY-NC-ND-3.0-IGO");
10704  }
10705  else if (INFILE(_SPDX_CC_BY_NC_ND_30)) {
10706  INTERESTING("CC-BY-NC-ND-3.0");
10707  }
10708  else if (INFILE(_SPDX_CC_BY_NC_ND_40)) {
10709  INTERESTING("CC-BY-NC-ND-4.0");
10710  }
10711  if (INFILE(_SPDX_CC_BY_NC_SA_10)) {
10712  INTERESTING("CC-BY-NC-SA-1.0");
10713  }
10714  else if (INFILE(_SPDX_CC_BY_NC_SA_20)) {
10715  INTERESTING("CC-BY-NC-SA-2.0");
10716  }
10717  else if (INFILE(_SPDX_CC_BY_NC_SA_25)) {
10718  INTERESTING("CC-BY-NC-SA-2.5");
10719  }
10720  else if (INFILE(_SPDX_CC_BY_NC_SA_30)) {
10721  INTERESTING("CC-BY-NC-SA-3.0");
10722  }
10723  else if (INFILE(_SPDX_CC_BY_NC_SA_40)) {
10724  INTERESTING("CC-BY-NC-SA-4.0");
10725  }
10726  if (INFILE(_SPDX_CC_BY_SA_10)) {
10727  INTERESTING("CC-BY-SA-1.0");
10728  }
10729  else if (INFILE(_SPDX_CC_BY_SA_20)) {
10730  INTERESTING("CC-BY-SA-2.0");
10731  }
10732  else if (INFILE(_SPDX_CC_BY_SA_25)) {
10733  INTERESTING("CC-BY-SA-2.5");
10734  }
10735  else if (INFILE(_SPDX_CC_BY_SA_30_AT)) {
10736  INTERESTING("CC-BY-SA-3.0-AT");
10737  }
10738  else if (INFILE(_SPDX_CC_BY_SA_30)) {
10739  INTERESTING("CC-BY-SA-3.0");
10740  }
10741  else if (INFILE(_SPDX_CC_BY_SA_40)) {
10742  INTERESTING("CC-BY-SA-4.0");
10743  }
10744  if (INFILE(_SPDX_CDLA_Permissive_10)) {
10745  INTERESTING("CDLA-Permissive-1.0");
10746  }
10747  if (INFILE(_SPDX_CDLA_Sharing_10)) {
10748  INTERESTING("CDLA-Sharing-1.0");
10749  }
10750  if (INFILE(_SPDX_Crossword)) {
10751  INTERESTING("Crossword");
10752  }
10753  if (INFILE(_SPDX_CrystalStacker)) {
10754  INTERESTING("CrystalStacker");
10755  }
10756  if (INFILE(_SPDX_CUA_OPL_10)) {
10757  INTERESTING("CUA-OPL-1.0");
10758  }
10759  if (INFILE(_SPDX_Cube)) {
10760  INTERESTING("Cube");
10761  }
10762  if (INFILE(_SPDX_curl)) {
10763  INTERESTING("curl");
10764  }
10765  if (INFILE(_SPDX_D_FSL_10)) {
10766  INTERESTING("D-FSL-1.0");
10767  }
10768  if (INFILE(_SPDX_diffmark)) {
10769  INTERESTING("diffmark");
10770  }
10771  if (INFILE(_SPDX_WTFPL)) {
10772  INTERESTING("WTFPL");
10773  }
10774  if (HASTEXT(_SPDX_DOC, REG_EXTENDED) || HASTEXT(_PHR_DOC, REG_EXTENDED)) {
10775  INTERESTING("DOC");
10776  }
10777  if (INFILE(_SPDX_Dotseqn)) {
10778  INTERESTING("Dotseqn");
10779  }
10780  if (INFILE(_SPDX_DSDP)) {
10781  INTERESTING("DSDP");
10782  }
10783  if (INFILE(_SPDX_dvipdfm)) {
10784  INTERESTING("dvipdfm");
10785  }
10786  if (INFILE(_SPDX_EPL_10)) {
10787  INTERESTING("EPL-1.0");
10788  }
10789  else if (INFILE(_SPDX_EPL_20)) {
10790  INTERESTING("EPL-2.0");
10791  }
10792  if (INFILE(_SPDX_ECL_10)) {
10793  INTERESTING("ECL-1.0");
10794  }
10795  if (INFILE(_SPDX_ECL_20)) {
10796  INTERESTING("ECL-2.0");
10797  }
10798  if (INFILE(_SPDX_eGenix)) {
10799  INTERESTING("eGenix");
10800  }
10801  if (INFILE(_SPDX_EFL_10)) {
10802  INTERESTING("EFL-1.0");
10803  }
10804  if (INFILE(_SPDX_EFL_20)) {
10805  INTERESTING("EFL-2.0");
10806  }
10807  if (INFILE(_SPDX_Entessa)) {
10808  INTERESTING("Entessa");
10809  }
10810  if (INFILE(_SPDX_EPICS)) {
10811  INTERESTING("EPICS");
10812  }
10813  if (INFILE(_SPDX_ErlPL_11)) {
10814  INTERESTING("ErlPL-1.1");
10815  }
10816  if (INFILE(_SPDX_etalab_20)) {
10817  INTERESTING("etalab-2.0");
10818  }
10819  if (INFILE(_SPDX_EUDatagrid)) {
10820  INTERESTING("EUDatagrid");
10821  }
10822  if (INFILE(_SPDX_EUPL_10)) {
10823  INTERESTING("EUPL-1.0");
10824  }
10825  else if (INFILE(_SPDX_EUPL_11)) {
10826  INTERESTING("EUPL-1.1");
10827  }
10828  else if (INFILE(_SPDX_EUPL_12)) {
10829  INTERESTING("EUPL-1.2");
10830  }
10831  if (INFILE(_SPDX_Eurosym)) {
10832  INTERESTING("Eurosym");
10833  }
10834  if (HASTEXT(_SPDX_Fair, REG_EXTENDED) || HASTEXT(_PHR_Fair, REG_EXTENDED)) {
10835  INTERESTING("Fair");
10836  }
10837  if (INFILE(_SPDX_Frameworx_10)) {
10838  INTERESTING("Frameworx-1.0");
10839  }
10840  if (INFILE(_SPDX_FreeImage)) {
10841  INTERESTING("FreeImage");
10842  }
10843  if (INFILE(_SPDX_FSFAP)) {
10844  INTERESTING("FSFAP");
10845  }
10846  if (INFILE(_SPDX_FSFULLR)) {
10847  INTERESTING("FSFULLR");
10848  }
10849  else if (INFILE(_SPDX_FSFUL)) {
10850  INTERESTING("FSFUL");
10851  }
10852  if (INFILE(_SPDX_Giftware)) {
10853  INTERESTING("Giftware");
10854  }
10855  if (INFILE(_SPDX_GL2PS)) {
10856  INTERESTING("GL2PS");
10857  }
10858  if (INFILE(_SPDX_Glulxe)) {
10859  INTERESTING("Glulxe");
10860  }
10861  if (INFILE(_SPDX_GFDL_11_invariants_or_later)) {
10862  INTERESTING("GFDL-1.1-invariants-or-later");
10863  }
10864  else if (INFILE(_SPDX_GFDL_11_no_invariants_or_later)) {
10865  INTERESTING("GFDL-1.1-no-invariants-or-later");
10866  }
10867  else if (INFILE(_SPDX_GFDL_11_invariants_only)) {
10868  INTERESTING("GFDL-1.1-invariants-only");
10869  }
10870  else if (INFILE(_SPDX_GFDL_11_no_invariants_only)) {
10871  INTERESTING("GFDL-1.1-no-invariants-only");
10872  }
10873  else if (INFILE(_SPDX_GFDL_11_or_later)
10874  || HASTEXT(_SPDX_GFDL_11plus, REG_EXTENDED)
10875  || HASTEXT(_PHR_GFDL_11plus, REG_EXTENDED))
10876  {
10877  INTERESTING("GFDL-1.1-or-later");
10878  }
10879  else if (INFILE(_SPDX_GFDL_11)) {
10880  INTERESTING("GFDL-1.1-only");
10881  }
10882  else if (INFILE(_SPDX_GFDL_12_invariants_or_later)) {
10883  INTERESTING("GFDL-1.2-invariants-or-later");
10884  }
10885  else if (INFILE(_SPDX_GFDL_12_no_invariants_or_later)) {
10886  INTERESTING("GFDL-1.2-no-invariants-or-later");
10887  }
10888  else if (INFILE(_SPDX_GFDL_12_invariants_only)) {
10889  INTERESTING("GFDL-1.2-invariants-only");
10890  }
10891  else if (INFILE(_SPDX_GFDL_12_no_invariants_only)) {
10892  INTERESTING("GFDL-1.2-no-invariants-only");
10893  }
10894  else if (INFILE(_SPDX_GFDL_12_or_later)
10895  || HASTEXT(_SPDX_GFDL_12plus, REG_EXTENDED)
10896  || HASTEXT(_PHR_GFDL_12plus, REG_EXTENDED))
10897  {
10898  INTERESTING("GFDL-1.2-or-later");
10899  }
10900  else if (INFILE(_SPDX_GFDL_12)) {
10901  INTERESTING("GFDL-1.2-only");
10902  }
10903  else if (INFILE(_SPDX_GFDL_13_invariants_or_later)) {
10904  INTERESTING("GFDL-1.3-invariants-or-later");
10905  }
10906  else if (INFILE(_SPDX_GFDL_13_no_invariants_or_later)) {
10907  INTERESTING("GFDL-1.3-no-invariants-or-later");
10908  }
10909  else if (INFILE(_SPDX_GFDL_13_invariants_only)) {
10910  INTERESTING("GFDL-1.3-invariants-only");
10911  }
10912  else if (INFILE(_SPDX_GFDL_13_no_invariants_only)) {
10913  INTERESTING("GFDL-1.3-no-invariants-only");
10914  }
10915  else if (INFILE(_SPDX_GFDL_13_or_later)
10916  || HASTEXT(_SPDX_GFDL_13plus, REG_EXTENDED)
10917  || HASTEXT(_PHR_GFDL_13plus, REG_EXTENDED))
10918  {
10919  INTERESTING("GFDL-1.3-or-later");
10920  }
10921  else if (INFILE(_SPDX_GFDL_13)) {
10922  INTERESTING("GFDL-1.3");
10923  }
10924  if (INFILE(_SPDX_GLWTPL)) {
10925  INTERESTING("GLWTPL");
10926  }
10927  if (INFILE(_SPDX_gnuplot)) {
10928  INTERESTING("gnuplot");
10929  }
10930  if (INFILE(_SPDX_gSOAP_13b)) {
10931  INTERESTING("gSOAP-1.3b");
10932  }
10933  if (INFILE(_SPDX_HaskellReport)) {
10934  INTERESTING("HaskellReport");
10935  }
10936  if (INFILE(_SPDX_Hippocratic_21)) {
10937  INTERESTING("Hippocratic-2.1");
10938  }
10939  if (INFILE(_SPDX_HPND_sell_variant)) {
10940  INTERESTING("HPND-sell-variant");
10941  }
10942  else if (INFILE(_SPDX_HPND)) {
10943  INTERESTING("HPND");
10944  }
10945  if (INFILE(_SPDX_IBM_pibs)) {
10946  INTERESTING("IBM-pibs");
10947  }
10948  if (INFILE(_SPDX_IPL_10)) {
10949  INTERESTING("IPL-1.0");
10950  }
10951  if (INFILE(_SPDX_ImageMagick)) {
10952  INTERESTING("ImageMagick");
10953  }
10954  if (INFILE(_SPDX_iMatix)) {
10955  INTERESTING("iMatix");
10956  }
10957  if (INFILE(_SPDX_Imlib2)) {
10958  INTERESTING("Imlib2");
10959  }
10960  if (INFILE(_SPDX_IJG)) {
10961  INTERESTING("IJG");
10962  }
10963  if (INFILE(_SPDX_Info_ZIP)) {
10964  INTERESTING("Info-ZIP");
10965  }
10966  if (INFILE(_SPDX_Interbase_10)) {
10967  INTERESTING("Interbase-1.0");
10968  }
10969  if (INFILE(_SPDX_IPA)) {
10970  INTERESTING("IPA");
10971  }
10972  if (INFILE(_SPDX_ISC)) {
10973  INTERESTING("ISC");
10974  }
10975  if (INFILE(_SPDX_JasPer_20)) {
10976  INTERESTING("JasPer-2.0");
10977  }
10978  if (INFILE(_SPDX_JPNIC)) {
10979  INTERESTING("JPNIC");
10980  }
10981  if (INFILE(_SPDX_JSON)) {
10982  INTERESTING("JSON");
10983  }
10984  if (INFILE(_SPDX_Latex2e)) {
10985  INTERESTING("Latex2e");
10986  }
10987  if (INFILE(_SPDX_Leptonica)) {
10988  INTERESTING("Leptonica");
10989  }
10990  if (INFILE(_SPDX_LGPLLR)) {
10991  INTERESTING("LGPLLR");
10992  }
10993  if (INFILE(_SPDX_libpng_20)) {
10994  INTERESTING("libpng-2.0");
10995  }
10996  else if (INFILE(_SPDX_Libpng)) {
10997  INTERESTING("Libpng");
10998  }
10999  if (INFILE(_SPDX_libselinux_10)) {
11000  INTERESTING("libselinux-1.0");
11001  }
11002  if (INFILE(_SPDX_libtiff)) {
11003  INTERESTING("libtiff");
11004  }
11005  if (INFILE(_SPDX_LAL_12)) {
11006  INTERESTING("LAL-1.2");
11007  }
11008  if (INFILE(_SPDX_LAL_13)) {
11009  INTERESTING("LAL-1.3");
11010  }
11011  if (INFILE(_SPDX_LiLiQ_P_11)) {
11012  INTERESTING("LiLiQ-P-1.1");
11013  }
11014  if (INFILE(_SPDX_LiLiQ_Rplus_11)) {
11015  INTERESTING("LiLiQ-Rplus-1.1");
11016  }
11017  if (INFILE(_SPDX_LiLiQ_R_11)) {
11018  INTERESTING("LiLiQ-R-1.1");
11019  }
11020  if (INFILE(_SPDX_Linux_OpenIB)) {
11021  INTERESTING("Linux-OpenIB");
11022  }
11023  if (INFILE(_SPDX_LPL_102)) {
11024  INTERESTING("LPL-1.02");
11025  }
11026  else if (INFILE(_SPDX_LPL_10)) {
11027  INTERESTING("LPL-1.0");
11028  }
11029  if (INFILE(_SPDX_LPPL_10)) {
11030  INTERESTING("LPPL-1.0");
11031  }
11032  if (INFILE(_SPDX_LPPL_11)) {
11033  INTERESTING("LPPL-1.1");
11034  }
11035  if (INFILE(_SPDX_LPPL_12)) {
11036  INTERESTING("LPPL-1.2");
11037  }
11038  if (INFILE(_SPDX_LPPL_13a)) {
11039  INTERESTING("LPPL-1.3a");
11040  }
11041  if (INFILE(_SPDX_LPPL_13c)) {
11042  INTERESTING("LPPL-1.3c");
11043  }
11044  if (INFILE(_SPDX_MakeIndex)) {
11045  INTERESTING("MakeIndex");
11046  }
11047  if (INFILE(_SPDX_MTLL)) {
11048  INTERESTING("MTLL");
11049  }
11050  if (INFILE(_SPDX_MS_PL)) {
11051  INTERESTING("MS-PL");
11052  }
11053  if (INFILE(_SPDX_MS_RL)) {
11054  INTERESTING("MS-RL");
11055  }
11056  if (INFILE(_SPDX_MirOS)) {
11057  INTERESTING("MirOS");
11058  }
11059  if (INFILE(_SPDX_MITNFA)) {
11060  INTERESTING("MITNFA");
11061  }
11062  if (!lmem[_fREAL] && INFILE(_SPDX_Motosoto)) {
11063  INTERESTING("Motosoto");
11064  }
11065  if (INFILE(_SPDX_mpich2)) {
11066  INTERESTING("mpich2");
11067  }
11068  if (INFILE(_SPDX_MulanPSL_20)) {
11069  INTERESTING("MulanPSL-2.0");
11070  }
11071  else if (INFILE(_SPDX_MulanPSL_10)) {
11072  INTERESTING("MulanPSL-1.0");
11073  }
11074  if (INFILE(_SPDX_Multics)) {
11075  INTERESTING("Multics");
11076  }
11077  if (INFILE(_SPDX_Mup)) {
11078  INTERESTING("Mup");
11079  }
11080  if (INFILE(_SPDX_NASA_13)) {
11081  INTERESTING("NASA-1.3");
11082  }
11083  if (INFILE(_SPDX_Naumen)) {
11084  INTERESTING("Naumen");
11085  }
11086  if (INFILE(_SPDX_NBPL_10)) {
11087  INTERESTING("NBPL-1.0");
11088  }
11089  if (INFILE(_SPDX_NCGL_UK_20)) {
11090  INTERESTING("NCGL-UK-2.0");
11091  }
11092  if (INFILE(_SPDX_Net_SNMP)) {
11093  INTERESTING("Net-SNMP");
11094  }
11095  if (INFILE(_SPDX_NetCDF)) {
11096  INTERESTING("NetCDF");
11097  }
11098  if (INFILE(_SPDX_NGPL)) {
11099  INTERESTING("NGPL");
11100  }
11101  if (INFILE(_SPDX_NIST_PD_fallback)) {
11102  INTERESTING("NIST-PD-fallback");
11103  }
11104  else if (INFILE(_SPDX_NIST_PD)) {
11105  INTERESTING("NIST-PD");
11106  }
11107  if (INFILE(_SPDX_NOSL)) {
11108  INTERESTING("NOSL");
11109  }
11110  if (INFILE(_SPDX_NPL_10)) {
11111  INTERESTING("NPL-1.0");
11112  }
11113  if (INFILE(_SPDX_NPL_11)) {
11114  INTERESTING("NPL-1.1");
11115  }
11116  if (INFILE(_SPDX_Newsletr)) {
11117  INTERESTING("Newsletr");
11118  }
11119  if (INFILE(_SPDX_NLPL)) {
11120  INTERESTING("NLPL");
11121  }
11122  if (INFILE(_SPDX_Nokia) && NOT_INFILE(_LT_OPENSSL_NOKIA)) {
11123  INTERESTING("Nokia");
11124  }
11125  if (INFILE(_SPDX_NPOSL_30)) {
11126  INTERESTING("NPOSL-3.0");
11127  }
11128  if (INFILE(_SPDX_NLOD_10)) {
11129  INTERESTING("NLOD-1.0");
11130  }
11131  if (INFILE(_SPDX_Noweb)) {
11132  INTERESTING("Noweb");
11133  }
11134  if (INFILE(_SPDX_NRL)) {
11135  INTERESTING("NRL");
11136  }
11137  if (INFILE(_SPDX_NTP_0)) {
11138  INTERESTING("NTP-0");
11139  }
11140  else if (INFILE(_SPDX_NTP)) {
11141  INTERESTING("NTP");
11142  }
11143  if (INFILE(_SPDX_Nunit)) {
11144  INTERESTING("Nunit");
11145  }
11146  if (INFILE(_SPDX_O_UDA_10)) {
11147  INTERESTING("O-UDA-1.0");
11148  }
11149  if (INFILE(_SPDX_OCLC_20)) {
11150  INTERESTING("OCLC-2.0");
11151  }
11152  if (INFILE(_SPDX_ODbL_10)) {
11153  INTERESTING("ODbL-1.0");
11154  }
11155  if (INFILE(_SPDX_OGC_10)) {
11156  INTERESTING("OGC-1.0");
11157  }
11158  if (INFILE(_SPDX_PDDL_10)) {
11159  INTERESTING("PDDL-1.0");
11160  }
11161  if (INFILE(_SPDX_OCCT_PL)) {
11162  INTERESTING("OCCT-PL");
11163  }
11164  if (INFILE(_SPDX_ODC_By_10)) {
11165  INTERESTING("ODC-By-1.0");
11166  }
11167  if (INFILE(_SPDX_OGL_Canada_20)) {
11168  INTERESTING("OGL-Canada-2.0");
11169  }
11170  if (INFILE(_SPDX_OGL_UK_10)) {
11171  INTERESTING("OGL-UK-1.0");
11172  }
11173  else if (INFILE(_SPDX_OGL_UK_20)) {
11174  INTERESTING("OGL-UK-2.0");
11175  }
11176  else if (INFILE(_SPDX_OGL_UK_30)) {
11177  INTERESTING("OGL-UK-3.0");
11178  }
11179  if (INFILE(_SPDX_OGTSL)) {
11180  INTERESTING("OGTSL");
11181  }
11182  if (INFILE(_SPDX_OLDAP_11)) {
11183  INTERESTING("OLDAP-1.1");
11184  }
11185  else if (INFILE(_SPDX_OLDAP_12)) {
11186  INTERESTING("OLDAP-1.2");
11187  }
11188  else if (INFILE(_SPDX_OLDAP_13)) {
11189  INTERESTING("OLDAP-1.3");
11190  }
11191  else if (INFILE(_SPDX_OLDAP_14)) {
11192  INTERESTING("OLDAP-1.4");
11193  }
11194  else if (INFILE(_SPDX_OLDAP_201)) {
11195  INTERESTING("OLDAP-2.0.1");
11196  }
11197  else if (INFILE(_SPDX_OLDAP_20)) {
11198  INTERESTING("OLDAP-2.0");
11199  }
11200  else if (INFILE(_SPDX_OLDAP_21)) {
11201  INTERESTING("OLDAP-2.1");
11202  }
11203  else if (INFILE(_SPDX_OLDAP_221)) {
11204  INTERESTING("OLDAP-2.2.1");
11205  }
11206  else if (INFILE(_SPDX_OLDAP_222)) {
11207  INTERESTING("OLDAP-2.2.2");
11208  }
11209  else if (INFILE(_SPDX_OLDAP_22)) {
11210  INTERESTING("OLDAP-2.2");
11211  }
11212  else if (INFILE(_SPDX_OLDAP_23)) {
11213  INTERESTING("OLDAP-2.3");
11214  }
11215  else if (INFILE(_SPDX_OLDAP_24)) {
11216  INTERESTING("OLDAP-2.4");
11217  }
11218  else if (INFILE(_SPDX_OLDAP_25)) {
11219  INTERESTING("OLDAP-2.5");
11220  }
11221  else if (INFILE(_SPDX_OLDAP_26)) {
11222  INTERESTING("OLDAP-2.6");
11223  }
11224  else if (INFILE(_SPDX_OLDAP_27)) {
11225  INTERESTING("OLDAP-2.7");
11226  }
11227  else if (INFILE(_SPDX_OLDAP_28)) {
11228  INTERESTING("OLDAP-2.8");
11229  }
11230  if (INFILE(_SPDX_OML)) {
11231  INTERESTING("OML");
11232  }
11233  if (INFILE(_SPDX_OPL_10)) {
11234  INTERESTING("OPL-1.0");
11235  }
11236  if (INFILE(_SPDX_OSL_10)) {
11237  INTERESTING("OSL-1.0");
11238  }
11239  if (INFILE(_SPDX_OSL_11)) {
11240  INTERESTING("OSL-1.1");
11241  }
11242  if (INFILE(_SPDX_OSL_20)) {
11243  INTERESTING("OSL-2.0");
11244  }
11245  if (INFILE(_SPDX_OSL_21)) {
11246  INTERESTING("OSL-2.1");
11247  }
11248  if (INFILE(_SPDX_OSL_30)) {
11249  INTERESTING("OSL-3.0");
11250  }
11251  if (INFILE(_SPDX_OSET_PL_21)) {
11252  INTERESTING("OSET-PL-2.1");
11253  }
11254  if (INFILE(_SPDX_Parity_700)) {
11255  INTERESTING("Parity-7.0.0");
11256  }
11257  else if (INFILE(_SPDX_Parity_600)) {
11258  INTERESTING("Parity-6.0.0");
11259  }
11260  if (INFILE(_SPDX_PHP_301)) {
11261  INTERESTING("PHP-3.01");
11262  }
11263  else if (INFILE(_SPDX_PHP_30)) {
11264  INTERESTING("PHP-3.0");
11265  }
11266  if (INFILE(_SPDX_Plexus)) {
11267  INTERESTING("Plexus");
11268  }
11269  if (INFILE(_SPDX_PolyForm_Noncommercial_100)) {
11270  INTERESTING("PolyForm-Noncommercial-1.0.0");
11271  }
11272  else if (INFILE(_SPDX_PolyForm_Small_Business_100)) {
11273  INTERESTING("PolyForm-Small-Business-1.0.0");
11274  }
11275  if (INFILE(_SPDX_PostgreSQL)) {
11276  INTERESTING("PostgreSQL");
11277  }
11278  if (INFILE(_SPDX_PSF_20)) {
11279  INTERESTING("PSF-2.0");
11280  }
11281  if (INFILE(_SPDX_psfrag)) {
11282  INTERESTING("psfrag");
11283  }
11284  if (INFILE(_SPDX_psutils)) {
11285  INTERESTING("psutils");
11286  }
11287  if (INFILE(_SPDX_Python_20)) {
11288  INTERESTING("Python-2.0");
11289  }
11290  if (INFILE(_SPDX_QPL_10)) {
11291  INTERESTING("QPL-1.0");
11292  }
11293  if (INFILE(_SPDX_Qhull)) {
11294  INTERESTING("Qhull");
11295  }
11296  if (INFILE(_SPDX_Rdisc)) {
11297  INTERESTING("Rdisc");
11298  }
11299  if (INFILE(_SPDX_RPSL_10)) {
11300  INTERESTING("RPSL-1.0");
11301  }
11302  if (INFILE(_SPDX_RPL_11)) {
11303  INTERESTING("RPL-1.1");
11304  }
11305  if (INFILE(_SPDX_RPL_15)) {
11306  INTERESTING("RPL-1.5");
11307  }
11308  if (INFILE(_SPDX_RHeCos_11)) {
11309  INTERESTING("RHeCos-1.1");
11310  }
11311  if (INFILE(_SPDX_RSCPL)) {
11312  INTERESTING("RSCPL");
11313  }
11314  if (INFILE(_SPDX_RSA_MD)) {
11315  INTERESTING("RSA-MD");
11316  }
11317  if (INFILE(_SPDX_Ruby)) {
11318  INTERESTING("Ruby");
11319  }
11320  if (INFILE(_SPDX_SAX_PD)) {
11321  INTERESTING("SAX-PD");
11322  }
11323  if (INFILE(_SPDX_Saxpath)) {
11324  INTERESTING("Saxpath");
11325  }
11326  if (INFILE(_SPDX_SHL_051)) {
11327  INTERESTING("SHL-0.51");
11328  }
11329  else if (INFILE(_SPDX_SHL_05)) {
11330  INTERESTING("SHL-0.5");
11331  }
11332  if (INFILE(_SPDX_SCEA)) {
11333  INTERESTING("SCEA");
11334  }
11335  if (INFILE(_SPDX_SWL)) {
11336  INTERESTING("SWL");
11337  }
11338  if (INFILE(_SPDX_SMPPL)) {
11339  INTERESTING("SMPPL");
11340  }
11341  if (INFILE(_SPDX_Sendmail_823)) {
11342  INTERESTING("Sendmail-8.23");
11343  }
11344  else if (INFILE(_SPDX_Sendmail)) {
11345  INTERESTING("Sendmail");
11346  }
11347  if (INFILE(_SPDX_SGI_B_10)) {
11348  INTERESTING("SGI-B-1.0");
11349  }
11350  if (INFILE(_SPDX_SGI_B_11)) {
11351  INTERESTING("SGI-B-1.1");
11352  }
11353  if (INFILE(_SPDX_SGI_B_20)) {
11354  INTERESTING("SGI-B-2.0");
11355  }
11356  if (INFILE(_SPDX_SimPL_20)) {
11357  INTERESTING("SimPL-2.0");
11358  }
11359  if (INFILE(_SPDX_Sleepycat)) {
11360  INTERESTING("Sleepycat");
11361  }
11362  if (INFILE(_SPDX_SNIA)) {
11363  INTERESTING("SNIA");
11364  }
11365  if (INFILE(_SPDX_Spencer_86)) {
11366  INTERESTING("Spencer-86");
11367  }
11368  if (INFILE(_SPDX_Spencer_94)) {
11369  INTERESTING("Spencer-94");
11370  }
11371  if (INFILE(_SPDX_Spencer_99)) {
11372  INTERESTING("Spencer-99");
11373  }
11374  if (INFILE(_SPDX_SMLNJ)) {
11375  INTERESTING("SMLNJ");
11376  }
11377  if (INFILE(_SPDX_SSH_OpenSSH)) {
11378  INTERESTING("SSH-OpenSSH");
11379  }
11380  if (INFILE(_SPDX_SSH_short)) {
11381  INTERESTING("SSH-short");
11382  }
11383  if (INFILE(_SPDX_SSPL_10)) {
11384  INTERESTING("SSPL-1.0");
11385  }
11386  if (INFILE(_SPDX_SugarCRM_113)) {
11387  INTERESTING("SugarCRM-1.1.3");
11388  }
11389  if (INFILE(_SPDX_SISSL_12)) {
11390  INTERESTING("SISSL-1.2");
11391  }
11392  else if (!lmem[_fREAL] && INFILE(_SPDX_SISSL)) {
11393  INTERESTING("SISSL");
11394  }
11395  if (INFILE(_SPDX_SPL_10)) {
11396  INTERESTING("SPL-1.0");
11397  }
11398  if (INFILE(_SPDX_Watcom_10)) {
11399  INTERESTING("Watcom-1.0");
11400  }
11401  if (INFILE(_SPDX_TAPR_OHL_10)) {
11402  INTERESTING("TAPR-OHL-1.0");
11403  }
11404  if (INFILE(_SPDX_TCP_wrappers)) {
11405  INTERESTING("TCP-wrappers");
11406  }
11407  if (INFILE(_SPDX_Unlicense)) {
11408  INTERESTING("Unlicense");
11409  }
11410  if (INFILE(_SPDX_TMate)) {
11411  INTERESTING("TMate");
11412  }
11413  if (INFILE(_SPDX_TORQUE_11)) {
11414  INTERESTING("TORQUE-1.1");
11415  }
11416  if (INFILE(_SPDX_TOSL)) {
11417  INTERESTING("TOSL");
11418  }
11419  if (INFILE(_SPDX_TU_Berlin_10)) {
11420  INTERESTING("TU-Berlin-1.0");
11421  }
11422  else if (INFILE(_SPDX_TU_Berlin_20)) {
11423  INTERESTING("TU-Berlin-2.0");
11424  }
11425  if (INFILE(_SPDX_UCL_10)) {
11426  INTERESTING("UCL-1.0");
11427  }
11428  if (INFILE(_SPDX_Unicode_DFS_2015)) {
11429  INTERESTING("Unicode-DFS-2015");
11430  }
11431  if (INFILE(_SPDX_Unicode_DFS_2016)) {
11432  INTERESTING("Unicode-DFS-2016");
11433  }
11434  if (INFILE(_SPDX_Unicode_TOU)) {
11435  INTERESTING("Unicode-TOU");
11436  }
11437  if (INFILE(_SPDX_UPL_10)) {
11438  INTERESTING("UPL-1.0");
11439  }
11440  if (INFILE(_SPDX_NCSA)) {
11441  INTERESTING("NCSA");
11442  }
11443  if (INFILE(_SPDX_Vim)) {
11444  INTERESTING("Vim");
11445  }
11446  if (INFILE(_SPDX_VOSTROM)) {
11447  INTERESTING("VOSTROM");
11448  }
11449  if (INFILE(_SPDX_VSL_10)) {
11450  INTERESTING("VSL-1.0");
11451  }
11452  if (INFILE(_SPDX_W3C_20150513)) {
11453  INTERESTING("W3C-20150513");
11454  }
11455  else if (INFILE(_SPDX_W3C_19980720)) {
11456  INTERESTING("W3C-19980720");
11457  }
11458  else if (INFILE(_SPDX_W3C)) {
11459  INTERESTING("W3C");
11460  }
11461  if (INFILE(_SPDX_Wsuipa)) {
11462  INTERESTING("Wsuipa");
11463  }
11464  if (!lmem[_fREAL] && INFILE(_SPDX_Xnet)) {
11465  INTERESTING("Xnet");
11466  }
11467  if (INFILE(_SPDX_X11)) {
11468  INTERESTING("X11");
11469  }
11470  if (INFILE(_SPDX_Xerox)) {
11471  INTERESTING("Xerox");
11472  }
11473  if (INFILE(_SPDX_XFree86_11)) {
11474  INTERESTING("XFree86-1.1");
11475  }
11476  if (INFILE(_SPDX_xinetd)) {
11477  INTERESTING("xinetd");
11478  }
11479  if (INFILE(_SPDX_xpp)) {
11480  INTERESTING("xpp");
11481  }
11482  if (INFILE(_SPDX_XSkat)) {
11483  INTERESTING("XSkat");
11484  }
11485  if (INFILE(_SPDX_YPL_10)) {
11486  INTERESTING("YPL-1.0");
11487  }
11488  if (INFILE(_SPDX_YPL_11)) {
11489  INTERESTING("YPL-1.1");
11490  }
11491  if (INFILE(_SPDX_Zed)) {
11492  INTERESTING("Zed");
11493  }
11494  if (INFILE(_SPDX_Zend_20)) {
11495  INTERESTING("Zend-2.0");
11496  }
11497  if (INFILE(_SPDX_Zimbra_13)) {
11498  INTERESTING("Zimbra-1.3");
11499  }
11500  if (INFILE(_SPDX_Zimbra_14)) {
11501  INTERESTING("Zimbra-1.4");
11502  }
11503  return;
11504 }
11505 
11510 void copyleftExceptions(char *filetext, int size, int isML, int isPS)
11511 {
11512  if (INFILE(_SPDX_389_exception)) {
11513  INTERESTING("389-exception");
11514  }
11515  if (INFILE(_SPDX_Autoconf_exception_20)) {
11516  INTERESTING("Autoconf-exception-2.0");
11517  }
11518  if (INFILE(_SPDX_Autoconf_exception_30)) {
11519  INTERESTING("Autoconf-exception-3.0");
11520  }
11521  if (INFILE(_SPDX_Bison_exception_22)) {
11522  INTERESTING("Bison-exception-2.2");
11523  }
11524  if (INFILE(_SPDX_Bootloader_exception)) {
11525  INTERESTING("Bootloader-exception");
11526  }
11527  if (INFILE(_SPDX_Classpath_exception_20)) {
11528  INTERESTING("Classpath-exception-2.0");
11529  }
11530  if (INFILE(_SPDX_CLISP_exception_20)) {
11531  INTERESTING("CLISP-exception-2.0");
11532  }
11533  if (INFILE(_SPDX_DigiRule_FOSS_exception)) {
11534  INTERESTING("DigiRule-FOSS-exception");
11535  }
11536  if (INFILE(_SPDX_eCos_exception_20)) {
11537  INTERESTING("eCos-exception-2.0");
11538  }
11539  if (INFILE(_SPDX_Fawkes_Runtime_exception)) {
11540  INTERESTING("Fawkes-Runtime-exception");
11541  }
11542  if (INFILE(_SPDX_FLTK_exception)) {
11543  INTERESTING("FLTK-exception");
11544  }
11545  if (INFILE(_SPDX_Font_exception_20)) {
11546  INTERESTING("Font-exception-2.0");
11547  }
11548  if (INFILE(_SPDX_freertos_exception_20)) {
11549  INTERESTING("freertos-exception-2.0");
11550  }
11551  if (INFILE(_SPDX_GCC_exception_20)) {
11552  INTERESTING("GCC-exception-2.0");
11553  }
11554  if (INFILE(_SPDX_GCC_exception_31)) {
11555  INTERESTING("GCC-exception-3.1");
11556  }
11557  if (INFILE(_SPDX_gnu_javamail_exception)) {
11558  INTERESTING("gnu-javamail-exception");
11559  }
11560  if (INFILE(_SPDX_i2p_gpl_java_exception)) {
11561  INTERESTING("i2p-gpl-java-exception");
11562  }
11563  if (INFILE(_SPDX_Libtool_exception)) {
11564  INTERESTING("Libtool-exception");
11565  }
11566  if (INFILE(_SPDX_Linux_syscall_note)) {
11567  INTERESTING("Linux-syscall-note");
11568  }
11569  if (INFILE(_SPDX_LLVM_exception)) {
11570  INTERESTING("LLVM-exception");
11571  }
11572  if (INFILE(_SPDX_LZMA_exception)) {
11573  INTERESTING("LZMA-exception");
11574  }
11575  if (INFILE(_SPDX_mif_exception)) {
11576  INTERESTING("mif-exception");
11577  }
11578  if (INFILE(_SPDX_Nokia_Qt_exception_11)) {
11579  INTERESTING("Nokia-Qt-exception-1.1");
11580  }
11581  if (INFILE(_SPDX_OCCT_exception_10)) {
11582  INTERESTING("OCCT-exception-1.0");
11583  }
11584  if (INFILE(_SPDX_OpenJDK_assembly_exception_10)) {
11585  INTERESTING("OpenJDK-assembly-exception-1.0");
11586  }
11587  if (INFILE(_SPDX_openvpn_openssl_exception)) {
11588  INTERESTING("openvpn-openssl-exception");
11589  }
11590  if (INFILE(_SPDX_Qwt_exception_10)) {
11591  INTERESTING("Qwt-exception-1.0");
11592  }
11593  if (INFILE(_SPDX_u_boot_exception_20)) {
11594  INTERESTING("u-boot-exception-2.0");
11595  }
11596  if (INFILE(_SPDX_WxWindows_exception_31)) {
11597  INTERESTING("WxWindows-exception-3.1");
11598  }
11599  /*
11600  * Find exception phrases. There are similar phrases
11601  * in exception clauses. Therefore 'else if' structure
11602  * has to be used to get correct detections.
11603  */
11604  if (INFILE(_LT_389_exception)) {
11605  INTERESTING("389-exception");
11606  }
11607  else if (INFILE(_LT_Autoconf_exception_20)) {
11608  INTERESTING("Autoconf-exception-2.0");
11609  }
11610  else if (INFILE(_LT_GPL_EXCEPT_5) && INFILE(_LT_Autoconf_exception_30)) {
11611  INTERESTING("Autoconf-exception-3.0");
11612  }
11613  else if (INFILE(_PHR_Autoconf_exception_30)) {
11614  INTERESTING("Autoconf-exception-3.0");
11615  }
11616  else if (INFILE(_LT_Autoconf_exception_3)) {
11617  INTERESTING("Autoconf-exception");
11618  }
11619  else if (INFILE(_LT_Bison_exception_22)) {
11620  INTERESTING("Bison-exception-2.2");
11621  }
11622  else if (INFILE(_LT_Bison_exception_1) || INFILE(_LT_Bison_exception_2)) {
11623  INTERESTING("Bison-exception");
11624  }
11625  else if (INFILE(_LT_Bootloader_exception)) {
11626  INTERESTING("Bootloader-exception");
11627  }
11628  /* Contains similar text to classpath-exception */
11629  else if (INFILE(_LT_OpenJDK_assembly_exception_10_1) || HASTEXT(_LT_OpenJDK_assembly_exception_10_2, 0)) {
11630  INTERESTING("OpenJDK-assembly-exception-1.0");
11631  }
11632  else if (INFILE(_LT_GPL_EXCEPT_6)) {
11633  if (INFILE(_LT_mif_exception)) {
11634  INTERESTING("Fawkes-Runtime-exception");
11635  }
11636  else {
11637  INTERESTING("Classpath-exception-2.0");
11638  }
11639  }
11640  else if (INFILE(_LT_classpath_exception_1)) {
11641  INTERESTING("Classpath-exception-2.0");
11642  }
11643  else if (HASTEXT(_LT_CLISP_exception_20_1, 0) && INFILE(_LT_CLISP_exception_20_2)) {
11644  INTERESTING("CLISP-exception-2.0");
11645  }
11646  else if (HASTEXT(_TITLE_DigiRule_FOSS_exception, 0) || INFILE(_LT_DigiRule_FOSS_exception)) {
11647  INTERESTING("DigiRule-FOSS-exception");
11648  }
11649  else if (INFILE(_LT_eCos_exception) && INFILE(_LT_GPL_EXCEPT_7)) {
11650  INTERESTING("eCos-exception-2.0");
11651  }
11652  else if (HASTEXT(_LT_FLTK_exception, 0)) {
11653  INTERESTING("FLTK-exception");
11654  }
11655  else if (HASTEXT(_TEXT_FONT, REG_EXTENDED) || INFILE(_LT_FONT_EXCEPTION_20)) {
11656  INTERESTING("Font-exception-2.0");
11657  }
11658  else if (HASTEXT(_LT_freertos_exception_20, 0)) {
11659  INTERESTING("freertos-exception-2.0");
11660  }
11661  else if (INFILE(_LT_freertos_exception_1) || INFILE(_LT_freertos_exception_2)) {
11662  INTERESTING("freertos-exception");
11663  }
11664  else if (INFILE(_LT_GCC_exception_31_1) || INFILE(_LT_GCC_exception_31_2)) {
11665  INTERESTING("GCC-exception-3.1");
11666  }
11667  else if (INFILE(_LT_GCC_exception_20)) {
11668  INTERESTING("GCC-exception-2.0");
11669  }
11670  /* This wording is very similar to GCC_exception_20 */
11671  else if (INFILE(_LT_linking_exception_1)) {
11672  INTERESTING("linking-exception");
11673  }
11674  else if (HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
11675  INTERESTING("GCC-exception");
11676  }
11677  else if (INFILE(_LT_gnu_javamail_exception_1) || INFILE(_LT_gnu_javamail_exception_2)) {
11678  INTERESTING("gnu-javamail-exception");
11679  }
11680  else if (INFILE(_LT_i2p_gpl_java_exception)) {
11681  INTERESTING("i2p-gpl-java-exception");
11682  }
11683  else if (INFILE(_LT_GPL_EXCEPT_1) || INFILE(_LT_GPL_EXCEPT_2)) {
11684  if (HASTEXT(_LT_Libtool_exception, 0)) {
11685  INTERESTING("Libtool-exception");
11686  }
11687  if (HASTEXT(_LT_Autoconf_exception_2, REG_EXTENDED) || INFILE(_LT_Autoconf_exception_1)) {
11688  INTERESTING("Autoconf-exception");
11689  }
11690  }
11691  else if (INFILE(_LT_Linux_syscall_note)) {
11692  INTERESTING("Linux-syscall-note");
11693  }
11694  else if (HASTEXT(_LT_LLVM_exception_1, 0) || HASTEXT(_LT_LLVM_exception_2, 0)) {
11695  INTERESTING("LLVM-exception");
11696  }
11697  else if (INFILE(_LT_LZMA_exception)) {
11698  INTERESTING("LZMA-exception");
11699  }
11700  else if (INFILE(_LT_mif_exception)) {
11701  INTERESTING("mif-exception");
11702  }
11703  else if (HASTEXT(_LT_OCCT_exception_10_1, REG_EXTENDED) || INFILE(_LT_OCCT_exception_10_2)) {
11704  INTERESTING("OCCT-exception-1.0");
11705  }
11706  else if (INFILE(_LT_openvpn_openssl_exception)) {
11707  INTERESTING("openvpn-openssl-exception");
11708  }
11709  else if (HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0)) {
11710  INTERESTING("Qt-GPL-exception-1.0");
11711  }
11712  else if (HASTEXT(_LT_QT_GPL_EXCEPTION_10_1, 0) && INFILE(_LT_QT_GPL_EXCEPTION_10_2)) {
11713  INTERESTING("Qt-GPL-exception-1.0");
11714  }
11715  else if (HASTEXT(_LT_QT_GPL_EXCEPTION, 0) && HASTEXT(_LT_QT_GPL_EXCEPTION_10_3, 0)) {
11716  INTERESTING("Qt-GPL-exception-1.0");
11717  }
11718  else if (INFILE(_TITLE_Nokia_Qt_LGPL_exception_11)) {
11719  INTERESTING("Nokia-Qt-exception-1.1");
11720  }
11721  else if (INFILE(_TITLE_QT_LGPL_EXCEPTION_11)) {
11722  INTERESTING("Qt-LGPL-exception-1.1");
11723  }
11724  else if (INFILE(_LT_Qwt_exception_10_1)) {
11725  INTERESTING("Qwt-exception-1.0");
11726  }
11727  else if (HASTEXT(_LT_Qwt_exception_10_2, 0)) {
11728  INTERESTING("Qwt-exception-1.0");
11729  }
11730  else if (INFILE(_LT_WxWindows_exception_31)) {
11731  INTERESTING("WxWindows-exception-3.1");
11732  }
11733  /*
11734  * Full license text includes reference to LGPL-2.0-only
11735  * exception clause.
11736  */
11737  else if (INFILE(_PHR_WXWINDOWS_31)) {
11738  INTERESTING("WxWindows-exception-3.1");
11739  INTERESTING("LGPL-2.0-or-later");
11740  }
11741  /*
11742  * This is a vague reference to WxWindows license without
11743  * an exception reference.
11744  */
11745  else if (INFILE(_PHR_WXWINDOWS)) {
11746  INTERESTING("WxWindows");
11747  }
11748  else if (HASTEXT(_LT_u_boot_exception_20, REG_EXTENDED)) {
11749  INTERESTING("u-boot-exception-2.0");
11750  }
11751  else if (HASTEXT(_LT_GPL_EXCEPT_Trolltech, REG_EXTENDED)) {
11752  INTERESTING("trolltech-exception");
11753  }
11754  else if (INFILE(_LT_OpenSSL_exception_1) || INFILE(_LT_OpenSSL_exception_2)) {
11755  INTERESTING("OpenSSL-exception");
11756  }
11757  else if (INFILE(_LT_GPL_UPX_EXCEPT) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
11758  INTERESTING("UPX-exception");
11759  }
11760  else if (INFILE(_URL_mysql_floss_exception) || HASTEXT(_TITLE_mysql_floss_exception, 0)) {
11761  INTERESTING(lDebug ? "mysql-floss-exception(URL)" : "mysql-floss-exception");
11762  }
11763  else if (INFILE(_TITLE_Oracle_foss_exception) || INFILE(_LT_Oracle_foss_exception)) {
11764  INTERESTING("Oracle-foss-exception");
11765  }
11766  else if (INFILE(_LT_linking_exception_2) || (INFILE(_LT_linking_exception_3) && INFILE(_LT_GPL_EXCEPT_7))) {
11767  INTERESTING("linking-exception");
11768  }
11769  else if (HASTEXT(_TITLE_universal_foss_exception_10, 0)
11770  || URL_INFILE(_URL_universal_foss_exception_10)
11771  || INFILE(_LT_universal_foss_exception_10)) {
11772  INTERESTING("universal-foss-exception-1.0");
11773  }
11774  else if (INFILE(_LT_GPL_EXCEPT_1)) {
11775  INTERESTING(lDebug ? "GPL-except-1" : "GPL-exception");
11776  }
11777  else if (INFILE(_LT_GPL_EXCEPT_2)) {
11778  INTERESTING(lDebug ? "GPL-except-2" : "GPL-exception");
11779  }
11780  else if (INFILE(_LT_GPL_EXCEPT_3)) {
11781  INTERESTING(lDebug ? "GPL-except-3" : "GPL-exception");
11782  }
11783  else if (INFILE(_LT_GPL_EXCEPT_4)) {
11784  INTERESTING(lDebug ? "GPL-except-4" : "GPL-exception");
11785  }
11786  else if (INFILE(_LT_GPL_EXCEPT_7)) {
11787  INTERESTING("linking-exception");
11788  }
11789  else if (INFILE(_LT_GPL_SWI_PROLOG_EXCEPT)) {
11790  INTERESTING(lDebug ? "GPL-swi-prolog" : "GPL-exception");
11791  }
11792 
11793  return;
11794 }
11795 
11796 #ifdef LTSR_DEBUG
11797 #define LT_TARGET 1299 /* set to -1 OR the string# to track */
11798 void showLTCache(char *msg)
11799 {
11800  int i = 0;
11801  int nCached = 0;
11802  int nMatch = 0;
11803 
11804  printf("%s\n", msg);
11805  if (LT_TARGET >= 0) {
11806  printf("... tracking string #%d\n", LT_TARGET);
11807  }
11808  while (i < NFOOTPRINTS) {
11809  if (ltsr[i] < LTSR_SMASK) {
11810  printf(i == LT_TARGET ? "x" : ".");
11811  } else if (ltsr[i] == LTSR_YES) {
11812  printf("%%");
11813  nMatch++;
11814  nCached++;
11815  } else {
11816  printf(i == LT_TARGET ? "0" : ":");
11817  nCached++;
11818  }
11819  if ((++i % 75) == 0) {
11820  printf("|%04d\n", i);
11821  }
11822  }
11823  printf("\nLTSR-matches: %d, Cached: %d\n", nMatch, nCached);
11824  return;
11825 }
11826 #endif /* LTSR_DEBUG */
11827 
11828 #ifdef DOCTOR_DEBUG
11829 /*
11830  Debugging
11831  */
11832 void dumpMatch(char *text, char *label)
11833 {
11834  char *x = text + cur.regm.rm_so;
11835  char *cp = text + cur.regm.rm_eo;
11836 
11837  if (label) {
11838  printf("%s ", label);
11839  }
11840  printf("@ %d [", cur.regm.rm_so);
11841  for (; x < cp; x++) {
11842  if (!isEOL(*x)) {
11843  printf("%c", *x);
11844  }
11845  }
11846  printf("]\n");
11847  return;
11848 }
11849 
11850 #endif /* DOCTOR_DEBUG */
void doctorBuffer(char *buf, int isML, int isPS, int isCR)
Convert a buffer of multiple stuff to text-only, separated by spaces.
void listDump(list_t *l, int verbose)
print the passed in list
Definition: list.c:829
item_t * listGetItem(list_t *l, char *s)
get an item from the itemlist. If the item is not in the itemlist, then add it to the itemlist.
Definition: list.c:246
void listIterationReset(list_t *l)
Rest list ix to -1.
Definition: list.c:513
void listInit(list_t *l, int size, char *label)
intialize a list, if the list is not empty, empty it (initialize it to zero's).
Definition: list.c:54
item_t * listIterate(list_t *l)
return a pointer to listitem, returns a NULL_ITEM when no more items to return.
Definition: list.c:477
void listSort(list_t *l, int sortType)
Sort the list as per the sortType passed.
Definition: list.c:631
void listClear(list_t *l, int deallocFlag)
Destroy list_t.
Definition: list.c:106
if(!preg_match("/\s$projectGroup\s/", $groups) &&(posix_getgid() !=$gInfo[ 'gid']))
get monk license list of one specified uploadtree_id
Definition: migratetest.php:33
void printRegexMatch(int n, int cached)
CDB – Need to review this code, particularly for the use of an external file (Nomos....
Definition: util.c:986
char * getInstances(char *textp, int size, int nBefore, int nAfter, char *regex, int recordOffsets)
Get occurrence of a regex in a given string pointer.
Definition: util.c:630
char * copyString(char *s, char *label)
Create a copy of a string.
Definition: util.c:593
void Assert(int fatalFlag, const char *fmt,...)
Raise an assert.
Definition: util.c:1395
char * findEol(char *s)
Find first ROL in a string.
Definition: util.c:378
licText_t licText[]
Nomos header file.
#define NULL_ITEM
NULL item.
Definition: nomos.h:231
#define memFree(x, y)
Definition: nomos.h:531
#define NULL_STR
NULL string.
Definition: nomos.h:235
#define _SEED(x)
Definition: nomos.h:451
#define _REGEX(x)
Definition: nomos.h:447
#define isEOL(x)
Check if x points to a EOL character.
Definition: nomos.h:240
#define YES
Definition: nomos.h:175
#define LTSR_RMASK
Definition: nomos.h:196
#define LTSR_NO
Definition: nomos.h:199
#define NO
Definition: nomos.h:171
#define LTSR_SMASK
Definition: nomos.h:197
void Bail(int exitval)
Close connections and exit.
Definition: nomos_utils.c:537
#define FL_SAVEBASE
Definition: nomos.h:155
#define NULL_CHAR
NULL character.
Definition: nomos.h:234
#define LTSR_YES
Definition: nomos.h:198
#define OPTS_DEBUG
Definition: nomos.h:138
int optionIsSet(int val)
Check if an CLI option is set.
Definition: nomos_utils.c:564
int idxGrep_recordPosition(int index, char *data, int flags)
compile a regex, perform the search and record findings
Definition: nomos_regex.c:220
int idxGrep(int index, char *data, int flags)
compile a regex, and perform the search (on data?)
Definition: nomos_regex.c:205
int strGrep(char *regex, char *data, int flags)
General-purpose grep function, used for one-time-only searches.
Definition: nomos_regex.c:139
int idxGrep_recordPositionDoctored(int index, char *data, int flags)
compile a regex, perform the search and record findings
Definition: nomos_regex.c:241
int strNbuf(char *data, char *str)
Check if a string exists in buffer (case insensitive)
Definition: nomos_regex.c:528
void cleanLicenceBuffer()
Clean the license buffer.
Definition: nomos_utils.c:1015
FUNCTION void addLicence(GArray *theMatches, char *licenceName)
Add a license to the matches array.
Definition: nomos_utils.c:1000
#define NY_INFILE(x)
Calls fileHasPatt() with qType 4.
Definition: parse.c:196
#define URL_INFILE(x)
Check in file with qType 0|1.
Definition: parse.c:202
char * aslVersion(char *, int, int, int)
Check for ASL Apache versions.
Definition: parse.c:7435
static char licStr[myBUFSIZ]
Definition: parse.c:164
#define RM_INFILE(x)
Calls fileHasPatt() with qType 1.
Definition: parse.c:193
void addRef(char *, int)
This function fills in a character-buffer for a license of a CURRENT file being evaluated,...
Definition: parse.c:9522
char * pythonVersion(char *, int, int, int)
Check for python versions.
Definition: parse.c:7786
char * gfdlVersion(char *, int, int, int)
Check for GFDL versions.
Definition: parse.c:8145
static int lDebug
Definition: parse.c:179
static int lDiags
Definition: parse.c:180
void checkCornerCases(char *, int, int, int, int, int, int, int)
If we call this function, we still don't know anything about a license.
Definition: parse.c:10191
#define HASREGEX(x, cp)
Calls idxGrep()
Definition: parse.c:199
#define PARSE_ARGS
Arguments to parse.
Definition: parse.c:188
#define SEEN(x)
Check LTSR_SMASK on lstr[x].
Definition: parse.c:190
char * cplVersion(char *, int, int, int)
Check for CPL versions.
Definition: parse.c:8499
#define NOT_INFILE(x)
Calls fileHasPatt()
Definition: parse.c:192
int findPhrase(int, char *, int, int, int, int)
Check for the presence of a phrase in a file by first searching for the search key provided.
Definition: parse.c:8699
char * parseLicenses(char *filetext, int size, scanres_t *scp, int isML, int isPS)
Parse a file to check all the possible licenses and add them to matches.
Definition: parse.c:359
static char * sisslVersion(char *, int, int, int)
Check for SISSL versions.
Definition: parse.c:7408
static char * gplVersion(char *, int, int, int)
Check for GPL versions.
Definition: parse.c:8320
char * lpplVersion(char *, int, int, int)
Check for LPPL versions.
Definition: parse.c:7961
#define HASTEXT(x, fl)
Calls idxGrep_recordIndex()
Definition: parse.c:201
char * oslVersion(char *, int, int, int)
Check for OSL versions.
Definition: parse.c:7881
void checkFileReferences(char *, int, int, int, int, int)
Generic license-phrases referring to other files or running commands.
Definition: parse.c:9857
static int dbgIdxGrep(int, char *, int)
Debugging call for idxGrep()
Definition: parse.c:316
static struct @1 kludge
void saveRegexLocation(int, int, int, int)
Save a regex in whereList.
Definition: parse.c:9470
#define INFILE(x)
Calls fileHasPatt()
Definition: parse.c:191
int checkUnclassified(char *, int, int, int, int, int)
This function is called when all the above license-checks don't turn up anything useful....
Definition: parse.c:9710
void locateRegex(char *, item_t *, int, int, int, int)
Locate a regex in a given file.
Definition: parse.c:9189
#define HASREGEX_RI(x, cp)
Calls idxGrep_recordIndex()
Definition: parse.c:200
char * cddlVersion(char *, int, int, int)
Check for CDDL versions.
Definition: parse.c:7921
int famOPENLDAP(char *, int, int, int)
Utility function to search for OpenLDAP licenses. So many different footprints are used by OpenLDAP,...
Definition: parse.c:9608
char * lgplVersion(char *, int, int, int)
Check for LGPL versions.
Definition: parse.c:8211
static int fileHasPatt(int licTextIdx, char *filetext, int size, int isML, int isPS, int qType)
Checks for a phrase in a file.
Definition: parse.c:248
static char ltsr[NFOOTPRINTS]
Definition: parse.c:166
char * aflVersion(char *, int, int, int)
Check for AFL versions.
Definition: parse.c:7841
void spdxReference(char *, int, int, int)
Definition: parse.c:10478
void copyleftExceptions(char *, int, int, int)
Definition: parse.c:11510
char * ccVersion(char *, int, int, int)
Check for CC_BY-X versions.
Definition: parse.c:8530
char * agplVersion(char *, int, int, int)
Check for AGPL versions.
Definition: parse.c:8067
char * mplNplVersion(char *, int, int, int)
Check for MPL|NPL versions.
Definition: parse.c:7619
#define PERL_INFILE(x)
Calls fileHasPatt() with qType 3.
Definition: parse.c:195
static char * realVersion(char *, int, int, int, int)
Check for RPSL versions.
Definition: parse.c:7736
#define GPL_INFILE(x)
Calls fileHasPatt() with qType 2.
Definition: parse.c:194
static int pd
Definition: parse.c:175
#define LVAL(x)
Check LTSR_RMASK on lstr[x].
Definition: parse.c:189
start($application)
start the application Assumes application is restartable via /etc/init.d/<script>....
Definition: pkgConfig.php:1214
GArray * theMatches
Definition: nomos.h:417
int uPsize
Size.
Definition: nomos.h:349
int flags
Flags.
Definition: nomos.h:348
char progName[64]
Program name.
Definition: nomos.h:346
searchString_t text
License text.
Definition: nomos.h:335
char * regex
License regex.
Definition: nomos.h:435
char * tseed
unencrypted license text
Definition: nomos.h:436
list_t type structure used to keep various lists. (e.g. there are multiple lists).
Definition: nomos.h:308
item_t * items
Definition: nomos.h:317
int used
Definition: nomos.h:310
tricky data structure used for a list of 'items'
Definition: nomos.h:274
void * buf
Definition: nomos.h:279
char * str
Definition: nomos.h:278
int score
License match score.
Definition: nomos.h:457
int csLen
String length.
Definition: nomos.h:325